gpt4 book ai didi

sql-server - 确定哪个 SQL Server 数据库占用了 CPU 资源

转载 作者:行者123 更新时间:2023-12-03 01:57:35 24 4
gpt4 key购买 nike

我们正在运行 SQL Server 2008,目前有大约 50 个不同大小和工作负载的数据库。有时,SQL Server 会使 CPU 完全达到峰值大约一分钟,然后下降到正常基线负载。

我的问题是我无法确定哪个数据库或连接导致了它(我相当确定这是一个缺少索引的特定查询 - 或类似的东西)。我发现 T-SQL 查询可以为您提供当前进程的卡住图像。还有“最近昂贵的查询” View ,当然还有分析器,但很难映射到“这是导致它的数据库”答案。更困难的是,在我启动分析器或事件监视器之前,问题就消失了,而且这种情况每天只发生一两次。

理想情况下,我想使用性能计数器,这样我就可以简单地运行它一两天,然后看看是什么导致了峰值。但是我找不到任何相关的计数器。

有什么建议吗?

最佳答案

这会有所帮助,由 Glenn Berry 提供,改编自 Robert Pearl:

WITH DB_CPU_Stats
AS
(SELECT DatabaseID, DB_Name(DatabaseID) AS [DatabaseName], SUM(total_worker_time) AS [CPU_Time_Ms]
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY (SELECT CONVERT(int, value) AS [DatabaseID]
FROM sys.dm_exec_plan_attributes(qs.plan_handle)
WHERE attribute = N'dbid') AS F_DB
GROUP BY DatabaseID)
SELECT ROW_NUMBER() OVER(ORDER BY [CPU_Time_Ms] DESC) AS [row_num],
DatabaseName, [CPU_Time_Ms],
CAST([CPU_Time_Ms] * 1.0 / SUM([CPU_Time_Ms]) OVER() * 100.0 AS DECIMAL(5, 2)) AS [CPUPercent]
FROM DB_CPU_Stats
WHERE DatabaseID > 4 -- system databases
AND DatabaseID <> 32767 -- ResourceDB
ORDER BY row_num OPTION (RECOMPILE);

关于sql-server - 确定哪个 SQL Server 数据库占用了 CPU 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6370855/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com