sql-server - 如何检查哪个查询或用户导致 SQL Server 100% CPU 使用率
问题描述
我的 SQL Server 2016 数据库在 06:30 出现 100% CPU 利用率问题。现在我想检查是哪个查询或用户导致了这个问题。我在网上搜索了一些文章。他们都在展示如何在查询运行时检查它。但我想要的是在 06:30 查看历史记录。数据库现在很好。因此,如果我现在检查性能,我找不到任何查询/作业正在运行。如何查看历史记录以确定原因?
解决方案
您可以尝试从 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