Ring buffer를 활용한 External Memory Pressure 확인
- Version : SQL Server 2005, 2008, 2008R2, 2012
메모리 압력은 내부, 외부 두 가지 유형의 프로세스가 있으며 외부 메모리 압력은 프로세스와 전체 시스템의 페이징으로 발생 할 수 있다. 내부 메모리 압력은 OOM 상태 및 프로세서의 충돌로 발생 할 수 있다.
- Memory Pressure : http://sqlmvp.kr/140204286379
Memory Pressure에 대한 모니터링은 sys.dm_os_ring_buffers에서 가능 하다. 실습을 위해 Memory Pressure 발생 시킨다. 아래 스크립트는 sys.dm_os_ring_buffers에서 Ring_buffer_resource_monitor 정보를 확인 한다.
SELECT EventTime, record.value('(/Record/ResourceMonitor/Notification)[1]', 'varchar(max)') as [Type], record.value('(/Record/ResourceMonitor/IndicatorsProcess)[1]', 'int') as [IndicatorsProcess], record.value('(/Record/ResourceMonitor/IndicatorsSystem)[1]', 'int') as [IndicatorsSystem], record.value('(/Record/MemoryRecord/AvailablePhysicalMemory)[1]', 'bigint') AS [Avail Phys Mem, Kb], record.value('(/Record/MemoryRecord/AvailableVirtualAddressSpace)[1]', 'bigint') AS [Avail VAS, Kb] FROM ( SELECT DATEADD (ss, (-1 * ((cpu_ticks / CONVERT (float, ( cpu_ticks / ms_ticks ))) - [timestamp])/1000), GETDATE()) AS EventTime, CONVERT (xml, record) AS record FROM sys.dm_os_ring_buffers CROSS JOIN sys.dm_os_sys_info WHERE ring_buffer_type = 'RING_BUFFER_RESOURCE_MONITOR') AS tab ORDER BY EventTime DESC; |
리소스 모니터는 메모리 압력이 발생하면 링 버퍼에 기록하고 알려 준다. 실제로 SQLOS의 리소스 모니터에서 외부 메모리 압력이 발생 하였을 때 RESOURCE_MEMPHYSICAL_LOW (외부 또는 내부 메모리 축소) 항목에서 IndicatorsSystem 값이 변경 된 것을 확인 할 수 있다. 이러한 정보를 통해서 SQL Server가 제대로 구성되어 있는지 확인해야 한다.
[참고자료]
2014-01-09 / 강성욱 / http://sqlmvp.kr
'SQL Server > SQL Server Tip' 카테고리의 다른 글
SQL Server 메모리 병목 현상 식별 (0) | 2015.07.23 |
---|---|
SQL Server 시작 옵션 사용 (0) | 2015.07.23 |
Memory Pressure (0) | 2015.07.23 |
64비트 버전의 SQL Server 버퍼 풀 메모리 페이지 수 줄이는 방법 - Lock Page In Memory 설정 (0) | 2015.07.23 |
누락된 공유 잠금 (Missing Shared Locks) (0) | 2015.07.23 |