1. 程式人生 > >SQL Server中查詢CPU佔用高的SQL語句

SQL Server中查詢CPU佔用高的SQL語句

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