首页 > 解决方案 > 如何检查哪个查询或用户导致 SQL Server 100% CPU 使用率

问题描述

我的 SQL Server 2016 数据库在 06:30 出现 100% CPU 利用率问题。现在我想检查是哪个查询或用户导致了这个问题。我在网上搜索了一些文章。他们都在展示如何在查询运行时检查它。但我想要的是在 06:30 查看历史记录。数据库现在很好。因此,如果我现在检查性能,我找不到任何查询/作业正在运行。如何查看历史记录以确定原因?

标签: sql-server

解决方案


您可以尝试从 sys.dm_exec_query_stat dmv 调查最昂贵的并行执行查询,其中 max_worker_time 是最大 CPU 时间。

Select Top 100 O.type_desc, O.name, S.creation_time, S.last_execution_time, S.min_elapsed_time, S.max_elapsed_time,
       S.Last_elapsed_time, S.Min_worker_time, S.Max_worker_time, S.Last_worker_time, S.execution_count,
       SUBSTRING (T.text, (S.statement_start_offset/2)+1, ((CASE WHEN S.statement_end_offset = -1 THEN DATALENGTH(T.text) ELSE S.statement_end_offset END - S.statement_start_offset)/2)+1)
From sys.dm_exec_query_stats As S Cross Apply sys.dm_exec_sql_text(S.sql_handle) as T
                                  Cross Apply (Select type_desc, name From sys.objects Where object_id=T.objectid) as O
WHERE T.dbid = DB_ID() And
      S.Max_worker_time > S.Max_elapsed_time
Order by S.Max_worker_time Desc

推荐阅读