Search

Wednesday, May 9, 2012

Get CPU Utilization History for last 256 minutes

-- This version works with SQL Server 2008 and SQL Server 2008 R2 only

DECLARE @ts_now bigint = (SELECT cpu_ticks/(cpu_ticks/ms_ticks)FROM sys.dm_os_sys_info);


SELECT TOP(256) SQLProcessUtilization AS [SQL Server Process CPU Utilization],

               SystemIdle AS [System Idle Process],

               100 - SystemIdle - SQLProcessUtilization AS [Other Process CPU Utilization],

               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 WITH (NOLOCK)

                  WHERE ring_buffer_type = N'RING_BUFFER_SCHEDULER_MONITOR'

                  AND record LIKE N'%%') AS x

        ) AS y

ORDER BY record_id DESC OPTION (RECOMPILE);



 
-- Get CPU Utilization History (SQL 2005 Only)
 
 
DECLARE @ts_now bigint; 
SET @ts_now = (SELECT cpu_ticks / CONVERT(float, cpu_ticks_in_ms) FROM sys.dm_os_sys_info); 
 
SELECT TOP(256) SQLProcessUtilization AS [SQL Server Process CPU Utilization], 
               SystemIdle AS [System Idle Process], 
               100 - SystemIdle - SQLProcessUtilization AS [Other Process CPU Utilization], 
               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 '%%') AS x 
          ) AS y 
ORDER BY record_id DESC OPTION (RECOMPILE);
 








No comments:

Post a Comment