Event Session을 이용한 CPU Health check

   

-       Version : SQL Server 2012

   

SQL Server 2012에서는 이벤트를 사용하여 SQL Server 프로세스의 CPU 사용률과 시스템의 CPU 사용률에 대한 분단위의 정보를 얻을 수 있다. 또한 SQL Server에서 프로세스의 (소프트 및 하드)페이지 폴트 발생과 인스턴스 메모리의 사용량 변화, locked page 및 large page 할당 값을 얻을 수 있다.

   

다음 스크립트를 사용하여 이벤트 정보를 확인한다.

SET NOCOUNT ON

 

IF (SUBSTRING(CAST(SERVERPROPERTY ('ProductVersion') AS varchar(50)),1,CHARINDEX('.',CAST(SERVERPROPERTY ('ProductVersion') AS varchar(50)))-1) >= 11)

BEGIN

   

    DECLARE @UTCDateDiff int = DATEDIFF(mi,GETUTCDATE(),GETDATE());

 

    SELECT TOP 1 CAST(xet.target_data AS XML) AS XMLDATA INTO #SystemHealthSessionData

    FROM sys.dm_xe_session_targets xet

        JOIN sys.dm_xe_sessions xe ON (xe.address = xet.event_session_address)

    WHERE xe.name = 'system_health' AND xet.target_name = 'ring_buffer';

 

   

    WITH CTE_HealthSession (EventXML) AS

    (

    SELECT C.query('.') EventXML

    FROM #SystemHealthSessionData a

        CROSS APPLY a.XMLDATA.nodes('/RingBufferTarget/event') as T(C)

    )

 

    SELECT

        DATEADD(mi,@UTCDateDiff,EventXML.value('(/event/@timestamp)[1]', 'datetime')) as EventTime,

        EventXML.value('(/event/data/value)[3]', 'int') as process_utilization,

        EventXML.value('(/event/data/value)[4]', 'int') as system_idle,

        EventXML.value('(/event/data/value)[7]', 'float') as page_faults,

        EventXML.value('(/event/data/value)[8]', 'float') as working_set_delta,

        EventXML.value('(/event/data/value)[9]', 'int') as memory_utilization

    FROM CTE_HealthSession

    WHERE EventXML.value('(/event/@name)[1]', 'varchar(255)') = 'scheduler_monitor_system_health_ring_buffer_recorded'

    ORDER BY EventTime;

   

 

    DROP TABLE #SystemHealthSessionData;

   

END

 

SET NOCOUNT OFF

   

   

   

l  EventTime : 이벤트를 수집한 시간.

l  Process_utilzation : SQL Server가 사용한 평균 CPU 비율 (1분)

l  System_Idle : 서버의 CPU 유휴 비율. 다른 프로세스의 CPU 사용량을 확인 할 수 있다.

l  Page_fault : 페이지 폴트

l  Working_set_delta : 이전에 보고된 값과 현재 값의 차이

l  Memory_utilization : DBCC Memorystatus 에서 커밋된 메모리 퍼센트 값.

   

   

위의 스크립트를 이용한 CPU의 헬스체크를 통하여 현재 시스템의 상태를 모니터링 함으로써 발생할 수 있는 문제점을 미리 대비해야한다.

   

위의 스크립트에서는 CPU의 사용량 계산을 평균 1분의 사용량으로 나타내는데 평균을 나타내는시간이 길다면 길고 짧다면 짧을 수도 있다. 많은 DBA들이 오해하는 부분이 CPU가 일정 수준 이상으로 사용되면 바로 알림을 받아야 하지 않을까 하는 생각도 하지만 개인적인 생각으로는 CPU는 수시로 스파이크 현상이 나타나기 때문에 일시적인 스파이크로 진단하기보다는 DBA가 생각하는 평균 시간 동안 꾸준히 사용량이 높을때를 장애로 판단하는 것이 좀더 정확하지 않을까 생각한다.

   

   

[참고자료]

http://troubleshootingsql.com/2013/07/11/powerview-and-system-health-sessioncpu-health/  



강성욱 / jevida@naver.com

Microsoft SQL Server MVP

Blog : http://sqlmvp.kr

Facebook : http://facebook.com/sqlmvp




No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 3057
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 1940
1674 복사 전용 백업(COPY ONLY BACKUP) jevida(강성욱) 2016.09.13 3875
1673 SQL Server 기본 백업 폴더 변경하기 jevida(강성욱) 2016.09.13 4119
1672 sp_helpindex 의 향상된 버전 minsouk 2016.05.17 4588
1671 Spatial Index (공간 인덱스) 생성, 수정, 삭제 jevida(강성욱) 2016.01.11 9639
1670 Spatial Indexing 개요 (공간 인덱스) jevida(강성욱) 2016.01.11 7554
1669 Event Session을 이용한 Session Health check jevida(강성욱) 2016.01.11 6950
1668 SQL Server 2012 XML 플랜을 통한 병렬화 되지 않는 이유 살펴보기 jevida(강성욱) 2016.01.11 7534
1667 Event Session을 이용한 SQL OS Session Schedule check jevida(강성욱) 2016.01.11 7321
1666 Event Session을 이용한 Memory Health check jevida(강성욱) 2016.01.11 6969
» Event Session을 이용한 CPU Health check jevida(강성욱) 2016.01.11 8479
1664 DMV를 이용한 I/O Health check jevida(강성욱) 2016.01.11 7365
1663 CONCAT 함수 (문자열 연결하기)와 주의 사항 jevida(강성욱) 2016.01.11 28132
1662 SQL Server 2012 Columnstore Index jevida(강성욱) 2016.01.11 7586
1661 SQL Server 2012 File Stream / Table 관련 DMV jevida(강성욱) 2016.01.11 4893
1660 SQL Server2012 DMV – 메모리 덤프, 서비스, 구성 확인 jevida(강성욱) 2016.01.11 4825
1659 SQL Server2012 향상된 디버깅 기능 jevida(강성욱) 2016.01.11 4412
1658 SQL Server2012 매개 변수 구성 jevida(강성욱) 2016.01.11 3518
1657 SQL Server2012 도움말 설치 jevida(강성욱) 2016.01.11 3487
1656 SQL Server2012 Checkpoint 제어 jevida(강성욱) 2016.01.11 5370
1655 SSIS 패지키의 메타데이터 유효성 검사 중지하기 jevida(강성욱) 2016.01.11 3000





XE Login