SQL Server中查詢CPU佔用高的SQL語句
阿新 • • 發佈:2019-01-23
SQL Server中查詢CPU佔用高的情況,會用到sys.sysprocesses ,dm_exec_sessions ,dm_exec_requests
一、檢視當前的資料庫使用者連線有多少
USE master
GO
SELECT * FROM sys.[sysprocesses] WHERE [spid]>50 --AND DB_NAME([dbid])='gposdb'
SELECT COUNT(*) FROM [sys].[dm_exec_sessions] WHERE [session_id]>50
二、選取前10個最耗CPU時間的會話
SQL 程式碼 複製SELECTTOP10[session_id],
[request_id],
[start_time]AS'開始時間',
[status]AS'狀態',
[command]AS'命令',
dest.[text]AS'sql語句',
DB_NAME([database_id]) AS'資料庫名',
[blocking_session_id]AS'正在阻塞其他會話的會話ID',
[wait_type]AS'等待資源型別',
[wait_time]AS'等待時間',
[wait_resource]AS'等待的資源',
[reads]AS'物理讀次數',
[writes]AS'寫次數',
[logical_reads ]AS'邏輯讀次數',
[row_count]AS'返回結果行數'FROM sys.[dm_exec_requests]AS der
CROSS APPLY
sys.[dm_exec_sql_text](der.[sql_handle]) AS dest
WHERE[session_id]>50ANDDB_NAME(der.[database_id])='gposdb'ORDERBY[cpu_time]DESC
三、查詢前10個最耗CPU時間的SQL語句
SQL 程式碼 複製--在SSMS裡選擇以文字格式顯示結果SELECTTOP10
dest.[text] AS'sql語句'FROM sys.[dm_exec_requests]AS der
CROSS APPLY
sys.[dm_exec_sql_text](der.[sql_handle]) AS dest
WHERE[session_id]>50ORDERBY[cpu_time]DESC
四、查詢會話中有多少個worker在等待
SQL 程式碼 複製SELECTTOP10[session_id],
[request_id],
[start_time]AS'開始時間',
[status]AS'狀態',
[command]AS'命令',
dest.[text]AS'sql語句',
DB_NAME([database_id]) AS'資料庫名',
[blocking_session_id]AS'正在阻塞其他會話的會話ID',
der.[wait_type]AS'等待資源型別',
[wait_time]AS'等待時間',
[wait_resource]AS'等待的資源',
[dows].[waiting_tasks_count]AS'當前正在進行等待的任務數',
[reads]AS'物理讀次數',
[writes]AS'寫次數',
[logical_reads]AS'邏輯讀次數',
[row_count]AS'返回結果行數'FROM sys.[dm_exec_requests]AS der
INNERJOIN[sys].[dm_os_wait_stats]AS dows
ON der.[wait_type]=[dows].[wait_type]CROSS APPLY
sys.[dm_exec_sql_text](der.[sql_handle]) AS dest
WHERE[session_id]>50ORDERBY[cpu_time]DESC
五、查詢CPU佔用高的語句
SQL 程式碼 複製SELECTTOP10
total_worker_time/execution_count AS avg_cpu_cost, plan_handle,
execution_count,
(SELECTSUBSTRING(text, statement_start_offset/2+1,
(CASEWHEN statement_end_offset =-1THENLEN(CONVERT(nvarchar(max), text)) *2ELSE statement_end_offset
END- statement_start_offset)/2)
FROM sys.dm_exec_sql_text(sql_handle)) AS query_text
FROM sys.dm_exec_query_stats
ORDERBY[avg_cpu_cost]DESC