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