解决方法
正如评论所述,最好的工具是
sp_whoIsActive到
Adam Machanic.它可以通过多种方式使用,以查看启动脚本时正在运行的内容,或者您可以在循环中运行它来监视某些特定操作,例如缓慢查询.
要循环运行,请查看此处:How to Log Activity Using sp_whoisactive in a Loop
要检测慢查询:How to Use sp_WhoIsActive to Find Slow SQL Server Queries
您可以直接使用DMV来获取最慢的查询并从那里开始行动.检查Glenn Berry’s diagnostic queries.
最后,您可以使用此查询来查找最耗时的查询.您可以使用dm_exec_query_stats来添加更多数据或与其他数据连接以获取更多信息.请注意,每次重新启动服务器时,dmv都会被刷新并刷新.
SELECT creation_time,last_execution_time,total_physical_reads,total_logical_reads,total_logical_writes,execution_count,total_worker_time,total_elapsed_time,total_elapsed_time / execution_count avg_elapsed_time,SUBSTRING(st.text,(qs.statement_start_offset/2) + 1,((CASE statement_end_offset WHEN -1 THEN DATALENGTH(st.text) ELSE qs.statement_end_offset END - qs.statement_start_offset)/2) + 1) AS statement_text FROM sys.dm_exec_query_stats AS qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st ORDER BY total_elapsed_time / execution_count DESC;
编辑
新的选项已经有一段时间了,First Reponder Kit.是一组脚本,由BrentOzar团队在MIT license下免费提供,这将有助于各种任务,包括OP提出的任务.对于这种情况,主要是sp_BlitzFirst和sp_BlitzWho脚本.