天天看點

SQLSERVER排查CPU占用高的情況

--查詢CPU耗時最多的50個查詢

SELECT TOP 50 total_worker_time/execution_count/1000/1000 AS [CPU平均執行(秒)],

SUBSTRING(st.text, (qs.statement_start_offset/2)+1,

((CASE qs.statement_end_offset

WHEN -1 THEN DATALENGTH(st.text)

ELSE qs.statement_end_offset

END - qs.statement_start_offset)/2) + 1) N'執行語句'

,st.text N'完整語句'

,total_worker_time/1000/1000 AS [總消耗CPU 時間(秒)]

,execution_count [運作次數]

,qs.total_worker_time/qs.execution_count/1000/1000 AS [平均執行CPU 時間(秒)]

,last_execution_time AS [最後一次執行時間]

,max_worker_time /1000/1000 AS [最大執行時間(秒)]

,total_physical_reads N'實體讀取總次數'

,total_logical_reads/execution_count N'每次邏輯讀次數'

,total_logical_reads N'邏輯讀取總次數'

,total_logical_writes N'邏輯寫入總次數'

FROM sys.dm_exec_query_stats AS qs

CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st

WHERE last_execution_time>'2015-10-26 14:25:00'

ORDER BY total_worker_time/execution_count DESC;

--查詢目前阻塞的請求

SELECT session_id ,status ,blocking_session_id

,wait_type ,wait_time ,wait_resource

,transaction_id

,SUBSTRING(st.text, (qs.statement_start_offset/2)+1,

END - qs.statement_start_offset)/2) + 1) AS statement_text

FROM sys.dm_exec_requests qs

WHERE status = N'suspended';