有时我的应用程序运行缓慢。主要问题是一些昂贵的报告正在运行。我怎样才能找到这些报告以及如何立即杀死这些报告?
答案 0 :(得分:0)
我总是使用Adam Machanic的sp_WhoIsActive来查找长时间运行的查询。 sp_WhoIsActive在dba.stackexchange.com上有详细描述。
虽然您也可以编写自己的脚本或使用sp_who2
例如。
<强>更新强>
您对sp_WhoIsActive输出的前两列感兴趣。
第一列定义查询运行的时间。第二列是查询的session_id(或SPID)
例如,您可以使用KILL 60
来终止session_id 60
有关存储过程的详细说明,请查看here。
答案 1 :(得分:0)
我为您提供了一些建议,但并非所有建议都适合您。
1-必须提供报告和CRUD操作。至少你可以使用nolock或其他东西或在晚上运行它们,并可以脱机工作。 2 - 检查您的查询,因为如果数据量小于2 000 000,则主要问题是查询很多次。 3-分析报告类型,如果适合离线工作,请使用脱机系统进行报告 4-可以使用镜像或其他技术进行报告。 5-最佳实践始终是用于报告和CRUD操作的数据库。
答案 2 :(得分:0)
您可以使用以下命令获取长时间运行的查询。
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;
然后你可以使用
KILL 60
例如,杀死session_id 60。