查找最近在数据库上执行的所有查询


21

[我是初学者级T-SQL程序员]
[..希望我在正确的堆栈交换站点上]

我想获得我执行的所有查询的列表(至少,从早上起我今天执行的查询)。我需要报告查询的执行时间。

在线搜索并没有为我提供很多有用的信息。我在网上发现的唯一看起来很接近的查询是

SELECT
    deqs.last_execution_time AS [Time], 
    dest.TEXT AS [Query]
 FROM 
    sys.dm_exec_query_stats AS deqs
    CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
ORDER BY 
    deqs.last_execution_time DESC

该查询返回了一些奇怪的结果(其中大多数是一堆的存储过程)。而且,所有这些结果都显示从今天下午开始执行的查询(我需要从早上开始执行查询)。

我在之前的问题中找不到任何内容(如果已经提出类似的问题,请指向我)。

我看到了一些有关SQL Profiler的建议,但是我想Profiler仅在我已经开始跟踪时才可以帮助我(如果我错了,请更正我)。

有人可以建议我如何获取自早上以来已在数据库上执行的所有查询的列表(包括查询执行时间)。

[如果我还能以某种方式获得执行查询的用户的用户名,那将是有帮助的(不是必需的)

Answers:


12

该查询返回了一些奇怪的结果(其中大多数是一堆的存储过程)。此外,所有这些结果都显示从今天下午开始执行的查询(我需要从早上开始执行查询)。

那是因为您正在查找过程高速缓存,并且早晨使用的计划可能不再在那里存在(由于内存压力,服务器/实例重新启动,手动清除proc高速缓存等)。

使查询针对实例(或更具体地说是数据库)执行的真正方法是创建SQL跟踪或扩展事件会话。正确创建的任何一个都可以为您提供所需的信息。

如果您要查找今天早上和仅今天早上的执行统计信息(即,将上述监视实现设置为主动的和下一次要做的任务是不够的),那么除非已经创建了该监视实现,否则就不会有方法本身来获取这些信息。

为了将来参考,请从捕获SQL:StmtCompleted事件的SQL跟踪开始。在XE中将是sql_statement_completed事件。

我认为,与其继续搜索查询执行统计数据的剩余部分,不如我开始花时间研究如何重新执行您要衡量的工作量。但是在此之前,请设置适当的跟踪/监视。


我可以按SQL:StmtCompleted数据列过滤吗?
Kiquenet
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.