Aar*_*ron 6 sql-server-2008-r2 activity-monitor windows-server
我正在跟踪 SQL Server 活动监视器中报告的处理器百分比与资源监视器中使用的总处理器百分比之间的显着差异。我看到两者之间大约有 50% 的差异,而活动监视器总是更高。
系统规格:
什么会导致这种差异?
我应该看哪一个?
更新:
我看到资源监视器将其分为不同的类别,但是“CPU - 总计”图表不会显示机器上的所有 CPU 使用情况吗?
任务管理器性能选项卡显示它与活动监视器之间的相同差异。
活动监视器没有看到每个核心都是超线程的,这会不会有问题?不确定 SQL Server 如何看待所有 96 个内核。
2018 年 6 月 28 日更新
即使在迁移到 AWS 并将操作系统更新到 Server 2012 R2 之后,SQL Server 2008 r2 活动监视器仍然与任务管理器显示的内容相差甚远。下面的屏幕截图来自刚刚执行的负载测试。两个指标之间存在明显的 20% 差异。即使任务管理器报告总体 CPU 刚刚超过 55%,SQL 活动监视器也被锁定在 100%。来自 AWS Cloud watch 的指标显示的结果与 Task Manager 相同,因此我有两个数据指标与第三个甚至不在球场上相关。
更新的系统规格: 系统规格:
资源监视器在两个不同的图表上显示来自进程和服务的 CPU。(在您的示例中,32% + 37%,这意味着总共 69% 的 CPU)。
至于 SQL 活动监视器,它显示安装 SQL 的机器的 CPU 利用率。(在您的示例中,为 64%,与资源监视器相距不远。)
我使用查询来获取服务器上的 CPU 利用率。我在我的服务器上运行一项工作,如果我在过去 10 分钟内获得了超过 90% 的平均值,就会发出警报。
这是我的查询:
DECLARE @ts_now bigint = (SELECT cpu_ticks/(cpu_ticks/ms_ticks)FROM sys.dm_os_sys_info);
-- Top 10 : for the last 10 minutes
SELECT TOP(10) 100 - SystemIdle as TotalCPU,
DATEADD(ms, -1 * (@ts_now - [timestamp]), GETDATE()) AS [Event Time]
FROM (
SELECT record.value('(./Record/@id)[1]', 'int') AS record_id,
record.value('(./Record/SchedulerMonitorEvent/SystemHealth/SystemIdle)[1]', 'int')
AS [SystemIdle],
record.value('(./Record/SchedulerMonitorEvent/SystemHealth/ProcessUtilization)[1]',
'int')
AS [SQLProcessUtilization], [timestamp]
FROM (
SELECT [timestamp], CONVERT(xml, record) AS [record]
FROM sys.dm_os_ring_buffers
WHERE ring_buffer_type = N'RING_BUFFER_SCHEDULER_MONITOR'
AND record LIKE '%<SystemHealth>%') AS x
) AS y
ORDER BY record_id DESC;
Run Code Online (Sandbox Code Playgroud)