CPU 사용량 확인
declare @ms_now bigint
select @ms_now = ms_ticks from sys. dm_os_sys_info ;
select record_id ,
dateadd (ms , - 1 * ( @ms_now - [timestamp] ), GetDate ()) as [EventTime],
SQLProcessUtilization ,
100 - ( SystemIdle + SQLProcessUtilization) as [OtherProcessUtilization] ,
100 - SystemIdle as [Total CPU Usage]
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
SQLProcessUtilization : SQL Server가 사용하는 CPU 사용량.
OtherProcessUtilization : SQL Server를 제외한 기타 응용프로그램의 CPU 사용량.
Total CPU Usage : OS에서 실행되는 모든 응용프로그램의 CPU 사용량 총 합.
보통 CPU 사용량을 확인하기 위해 성능카운터(Processor Time)로 확인을 하거나 작업관리자에서 CPU 사용량을 확인할 수 있는데 sys.dm_os_ring_buffers 라는 DMV를 사용하여 SQL Server 에서 CPU 사용량을 모니터링 할 수 있습니다. 이 DMV는 문서화 되지 않은 기능이고, CPU 뿐만 아니라 메모리 관련 정보들도 확인할 수 있습니다.