데이터베이스 개발자 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
1913 SQL Server 시작 옵션 사용 jevida(강성욱) 2016.10.13 1818
» Ring buffer를 활용한 External Memory Pressure 확인 jevida(강성욱) 2016.10.12 1301
1911 Memory Pressure jevida(강성욱) 2016.10.12 1125
1910 64비트 버전의 SQL Server 버퍼 풀 메모리 페이지 수 줄이는 방법 jevida(강성욱) 2016.10.12 2499
1909 누락된 공유 잠금 (Missing Shared Locks) jevida(강성욱) 2016.10.12 1567
1908 Ad Hoc Distributed Queries 옵션 jevida(강성욱) 2016.10.12 3127
1907 높은 MAXDOP은 쿼리를 느리게 만들 수 있는가? jevida(강성욱) 2016.10.12 1320
1906 변경된 테이블 이름 복구하기 jevida(강성욱) 2016.10.12 1314
1905 Sys,dm_exec_connections jevida(강성욱) 2016.10.12 1946
1904 SQL Server 시작 매개 변수 설정 jevida(강성욱) 2016.10.12 2508
1903 AFTER 트리거를 INSTEAD OF 트리거로 변경 후 효율성 향상 jevida(강성욱) 2016.10.12 1810
1902 쿼리 대기 옵션 jevida(강성욱) 2016.10.12 1577
1901 Index create memory 설정 jevida(강성욱) 2016.10.12 1241
1900 Min memory per query 옵션 jevida(강성욱) 2016.10.12 1695
1899 SQL Server 에디션 다운그레이드와 제한된 기능 확인 jevida(강성욱) 2016.10.12 2128
1898 Downgrade from SQL Server Ent to Std Edition jevida(강성욱) 2016.10.12 1352
1897 트랜잭션 로그 여유 공간 모니터링 jevida(강성욱) 2016.10.12 1368
1896 SQL Server가 서비스 격리를 처리하는 방법 jevida(강성욱) 2016.10.12 1150
1895 쿼리 매개변수화 확인하기 jevida(강성욱) 2016.10.12 1437
1894 SQL Server에서 Drop 및 Delete 사용자 찾기 jevida(강성욱) 2016.10.12 1634





XE Login