[..希望我在正确的堆栈交换网站上]
我想得到我执行的所有查询的列表(至少,我今天早上执行的那些查询).我需要报告查询的执行时间.
在线搜索并没有给我带来太多有用的信息.我在网上找到的唯一一个看起来非常接近的查询是
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
这个查询返回了一些奇怪的结果(其中大部分是一堆sprocs).此外,所有这些结果显示自今天下午以来执行的查询(我需要从早上开始查询).
我在之前的问题中找不到任何内容(如果已经提出类似的问题,请指出我).
我看到了一些关于sql Profiler的建议,但我想探查器只有在我已经开始跟踪时才会帮助我(如果我错了,请纠正我).
解决方法
This query returned some odd results (most of which were a bunch of sprocs). Moreover,all these results show queries executed since today afternoon (I need queries from morning).
那是因为你正在查看过程缓存,并且早上使用的计划可能不再存在(由于内存压力,服务器/实例重启,手动清除proc缓存等).
获取针对实例(或更具体地说是数据库)执行查询的真正方法是创建sql跟踪或扩展事件会话.正确创建,其中任何一个都将为您提供您正在寻找的信息.
如果你正在寻找今天早上和今天早上的执行统计数据(即将上述监控实施设置为主动和下次执行的任务是不够的),那么除非已经创建了,否则将没有本地获取此信息的方式.
为了将来参考,请从捕获SQL:StmtCompleted事件的sql Trace开始.在XE中,它将是sql_statement_completed事件.
在我看来,我不会继续搜索查询执行统计信息的残余,而是开始花时间研究如何重新执行您尝试测量的工作负载.但是在此之前的这段时间,请设置正确的跟踪/监控.