데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

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/

 



강성욱 / jevida@naver.com
Microsoft SQL Server MVP
Blog : http://sqlmvp.kr
Facebook : http://facebook.com/sqlmvp

No. Subject Author Date Views
1930 트랜잭션 백업 실패와 전체 백업 성공 그리고 대처 방안 jevida(강성욱) 2016.10.13 1538
1929 Fast recovery 와 로그 잠금 jevida(강성욱) 2016.10.13 2018
1928 고스트 클린업 jevida(강성욱) 2016.10.13 2242
1927 페이지 분할이 발생 하였을 때 롤백을 하면 어떻게 될까? jevida(강성욱) 2016.10.13 1637
1926 DBCC WRITEPAGE - DBCC 명령을 사용한 데이터 파괴하기 jevida(강성욱) 2016.10.13 1638
1925 SQL Server Backup Error 3023 jevida(강성욱) 2016.10.13 2239
1924 Delete 작업과 페이지 offset 변화 jevida(강성욱) 2016.10.13 1477
1923 트랜잭션 로그 및 LSN을 이용한 삭제된 데이터 복구 jevida(강성욱) 2016.10.13 4954
1922 PFX 형식의 인증서를 SQL Server에서 사용하기 jevida(강성욱) 2016.10.13 1148
1921 SQL Server NUMA 메모리 노드와 Operating System 접근 jevida(강성욱) 2016.10.13 1279
1920 SQL Server 에러 핸들링 비용 비교 jevida(강성욱) 2016.10.13 1301
1919 압축 백업 시 Checksum 옵션으로 손상 확인하기 jevida(강성욱) 2016.10.13 1626
1918 SQL Server 2012 Memory Manager 구성 jevida(강성욱) 2016.10.13 1262
1917 SQL Server Memory Manager 변화 jevida(강성욱) 2016.10.13 1476
1916 Ring_Buffer_Resource_Monitor jevida(강성욱) 2016.10.13 994
1915 SQL Server 프로파일러 템플릿 만들기 jevida(강성욱) 2016.10.13 1331
1914 SQL Server 메모리 병목 현상 식별 jevida(강성욱) 2016.10.13 1755
1913 SQL Server 시작 옵션 사용 jevida(강성욱) 2016.10.13 1777
» Ring buffer를 활용한 External Memory Pressure 확인 jevida(강성욱) 2016.10.12 1256
1911 Memory Pressure jevida(강성욱) 2016.10.12 1120





XE Login