본문 바로가기

운영/성능 및 실행계획

MS SQL에서 CPU 사용율 확인

728x90

MS SQL 의 DMV로 서버의 CPU 사용율을 확인할 수 있는 대안이 필요하다.

DECLARE @ts_now BIGINT;

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

SELECT TOP(10) 
	SQLProcessUtilization AS sql_server_process_cpu,
	SystemIdle AS system_idle_process_cpu,
	100 - SystemIdle - SQLProcessUtilization AS other_process_cpu,
	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;    

 

728x90