SQLServer如何查詢近3分鐘最消耗CPU的SQL

Eric zhou發表於2024-05-13

在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語句。

相關文章