如何在 SQL Server 中查找当前长时间运行的查询以及如何立即终止它们?

Pru*_*eni 5 sql-server

有时我的应用程序运行缓慢。主要问题是一些昂贵的报告正在运行。我怎样才能找到这些报告以及如何立即杀死这些报告?

Son*_*u K 20

您可以使用以下命令来获取长时间运行的查询。

SELECT r.session_id,
       st.TEXT AS batch_text,
       qp.query_plan AS 'XML Plan',
       r.start_time,
       r.status,
       r.total_elapsed_time
FROM sys.dm_exec_requests AS r
     CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS st
     CROSS APPLY sys.dm_exec_query_plan(r.plan_handle) AS qp
WHERE DB_NAME(r.database_id) = '{db_name}'
ORDER BY cpu_time DESC;
Run Code Online (Sandbox Code Playgroud)

然后你可以使用

KILL 60 
Run Code Online (Sandbox Code Playgroud)

例如,杀死 session_id 60。


Nic*_*yvV 3

我总是使用Adam Machanic 的sp_WhoIsActive来查找长时间运行的查询。sp_WhoIsActive 在dba.stackexchange.com上有详细描述。

尽管您也可以编写自己的脚本或使用sp_who2示例。

更新
您对 sp_WhoIsActive 输出的前 2 列感兴趣。第一列定义查询运行的时间。第二列是查询的 session_id(或 SPID)。例如,
您可以使用杀死 session_id 60。 请查看此处以获取存储过程的详细说明。KILL 60