SQLServer如何查询近3分钟最消耗CPU的SQL

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

posted @ 2024-05-13 08:46  Eric zhou  阅读(104)  评论(0编辑  收藏  举报