尝试修复我们服务器上的问题 - 一个非常昂贵的查询正在使用我们的很多CPU。
当我使用活动监视器时,有时您可以使用该过程的显示详细信息,它将显示正在运行查询的sql。但并非总是如此。
我现在可以看到这个过程,但是如何判断哪些查询文本负责?如果我有sql,我可以确定来源,但此刻我什么都没有!
答案 0 :(得分:2)
尝试使用以下查询。
SELECT TOP 20
qs.sql_handle,
qs.execution_count,
qs.total_worker_time AS Total_CPU,
total_CPU_inSeconds = --Converted from microseconds
qs.total_worker_time/1000000,
average_CPU_inSeconds = --Converted from microseconds
(qs.total_worker_time/1000000) / qs.execution_count,
qs.total_elapsed_time,
total_elapsed_time_inSeconds = --Converted from microseconds
qs.total_elapsed_time/1000000,
st.text,
qp.query_plan
FROM
sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
CROSS apply sys.dm_exec_query_plan (qs.plan_handle) AS qp
ORDER BY qs.total_worker_time DESC
然后我可以建议你自己获得一份由Adam Machanic免费提供的精彩sp_WhoIsActive存储过程的副本。您可以使用该过程来标识所有当前正在运行的查询,包括大量相关信息,例如CPU使用的数量,IO,执行计划,查询文本,阻止等。