在SQL Server中,要查詢近3分鐘最消耗CPU的SQL語句,可以使用sys.dm_exec_query_stats
動態管理檢視結合sys.dm_exec_sql_text
函式來獲取SQL語句的文字。不過,直接查詢近3分鐘的資料可能需要一些額外的邏輯來篩選時間範圍,因為sys.dm_exec_query_stats
並不直接提供時間篩選的功能。
一種方法是首先確定當前時間之前3分鐘的時間戳,然後使用這個時間戳來篩選sys.dm_exec_query_stats
中的last_execution_time
欄位。以下是一個示例查詢,它可能需要根據你的具體需求進行調整:
DECLARE @ThreeMinutesAgo DATETIME; SET @ThreeMinutesAgo = DATEADD(MINUTE, -3, GETDATE()); SELECT TOP 10 total_worker_time / execution_count AS [Avg CPU Time], 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) AS statement_text FROM sys.dm_exec_query_stats AS qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st WHERE qs.last_execution_time > @ThreeMinutesAgo ORDER BY total_worker_time / execution_count DESC;
這個查詢首先計算出當前時間之前3分鐘的時間戳,然後使用這個時間戳作為篩選條件來獲取last_execution_time
欄位大於這個時間戳的所有記錄。接著,它計算平均CPU時間,並按降序排列以找到消耗CPU最多的SQL語句。