SQL Server/SQL Server Tip

Ring buffer를 활용한 External Memory Pressure 확인

SungWookKang 2015. 7. 23. 09:38
반응형

Ring buffer를 활용한 External Memory Pressure 확인

 

  • Version : SQL Server 2005, 2008, 2008R2, 2012

 

메모리 압력은 내부, 외부 두 가지 유형의 프로세스가 있으며 외부 메모리 압력은 프로세스와 전체 시스템의 페이징으로 발생 할 수 있다. 내부 메모리 압력은 OOM 상태 및 프로세서의 충돌로 발생 할 수 있다.

 

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가 제대로 구성되어 있는지 확인해야 한다.

 

[참고자료]

http://www.sqlskills.com/blogs/jonathan/identifying-external-memory-pressure-with-dm_os_ring_buffers-and-ring_buffer_resource_monitor/

 

2014-01-09 / 강성욱 / http://sqlmvp.kr

 

반응형