none
查詢CPU使用率-sys.dm_os_ring_buffers中的SQLProcessUtilization值有異常 RRS feed

  • 問題

  • 我在查詢資料庫主機的CPU使用狀況, 一是用語法去資料庫查詢, 二是查看工作管理員的CPU效能, 發現語法所查到的SQL Server Process CPU Utilization其值, 與工作管理員的CPU效能有所差異, SQL Server Process CPU Utilization常態性有明顯差異(偏高), 這是一台實體主機的資料庫, 若在VM上所建的其他資料庫就不會有這個情形, 懇請各位先進指點一下, 感恩。

    SQL Server Process CPU Utilization	System Idle Process	Other Process CPU Utilization	Event Time
    15	94	-9	2022-11-22 11:51:48.487
    16	95	-11	2022-11-22 11:50:48.397
    16	94	-10	2022-11-22 11:49:48.323
    16	94	-10	2022-11-22 11:48:48.233
    16	95	-11	2022-11-22 11:47:48.130
    15	94	-9	2022-11-22 11:46:48.043
    


    DECLARE @ts_now2 BIGINT
    SELECT @ts_now2 = cpu_ticks / (cpu_ticks / ms_ticks)
    FROM sys.dm_os_sys_info
    
    SELECT TOP (1000) SQLProcessUtilization AS [SQL Server Process CPU Utilization]
        ,SystemIdle AS [System Idle Process]
        ,100 - SystemIdle - SQLProcessUtilization AS [Other Process CPU Utilization]
        ,Dateadd(ms, - 1 * (@ts_now2 - [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;
    
    
    select scheduler_id, cpu_id, status, is_online 
    from sys.dm_os_schedulers 
    where status = 'VISIBLE ONLINE'


    • 已編輯 闕愷頡 2022年11月22日 上午 04:10 顯示格式調整
    2022年11月22日 上午 04:09