본문 바로가기

Dynamic Management Views

CPU 사용량 확인

-- 총 데이터 건수는 256개이고 , 1분에 한번 씩 순환된다.

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 뿐만 아니라 메모리 관련 정보들도 확인할 수 있습니다. 


http://technet.microsoft.com/en-us/library/cc966540.aspx