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 2023년 1월 - SQLER의 업데이트 강좌 리스트 코난(김대우) 2023.01.02 1254
1666 Event Session을 이용한 Memory Health check jevida(강성욱) 2016.01.11 6967
» Event Session을 이용한 CPU Health check jevida(강성욱) 2016.01.11 8468
1664 DMV를 이용한 I/O Health check jevida(강성욱) 2016.01.11 7361
1663 CONCAT 함수 (문자열 연결하기)와 주의 사항 jevida(강성욱) 2016.01.11 28094
1662 SQL Server 2012 Columnstore Index jevida(강성욱) 2016.01.11 7579
1661 SQL Server 2012 File Stream / Table 관련 DMV jevida(강성욱) 2016.01.11 4887
1660 SQL Server2012 DMV – 메모리 덤프, 서비스, 구성 확인 jevida(강성욱) 2016.01.11 4817
1659 SQL Server2012 향상된 디버깅 기능 jevida(강성욱) 2016.01.11 4411
1658 SQL Server2012 매개 변수 구성 jevida(강성욱) 2016.01.11 3513
1657 SQL Server2012 도움말 설치 jevida(강성욱) 2016.01.11 3483
1656 SQL Server2012 Checkpoint 제어 jevida(강성욱) 2016.01.11 5356
1655 SSIS 패지키의 메타데이터 유효성 검사 중지하기 jevida(강성욱) 2016.01.11 2985
1654 SSIS 로그 보관기간 설정 (CleanUp 기간 설정) jevida(강성욱) 2016.01.11 4344
1653 SSIS 패키지 보호 레벨 jevida(강성욱) 2016.01.11 3905
1652 DATABASE의 TABLE 및 COLUMN COMMENT 출력 joe 2015.09.10 7786
1651 백업 히스토리 모니터링 jevida(강성욱) 2015.03.31 11649
1650 백업 전략과 Differential Database Backup jevida(강성욱) 2015.03.31 11244
1649 SQL ServerPoint in time recovery jevida(강성욱) 2015.03.31 9071
1648 Striping SQL Server Database Backup jevida(강성욱) 2015.03.31 8708
1647 SQL 서버 감사가 있는 데이터베이스 복원 후 설정 jevida(강성욱) 2015.03.31 11927





XE Login