SQL Server 메모리 병목 현상 식별
- Version : SQL Server 2005, 2008, 2008R2, 2012
SQL Server의 메모리 사용량을 확인하기 위해 DBCC MEMORYSTATUS 및 DMV를 사용할 수 있다.
[DBCC MEMORYSTATUS]
DBCC MEMORYSTATUS는 현재 메모리 상태의 스냅샷을 제공한다.
dbcc memorystatus |
각 항목에 대한 정보는 다음 링크를 참고 한다.
- DBCC MEMORYSTATUS 명령 사용 하여 SQL Server 2005에서 메모리 사용을 모니터링 하는 방법 : http://support.microsoft.com/?id=907877
- INF: DBCC MEMORYSTATUS를 사용하여 SQL Server 메모리 사용 모니터 :
[DMV]
동적관리뷰를 사용하여 메모리 할당에 대한 자세한 정보를 얻을 수 있다. DMV는 DBCC MEMORYSTATUS 명령과 유사한 데이터를 제공하지만 훨씬 더 많은 정보를 나타낸다.
다음 쿼리는 AWE 메커니즘을 통해 할당 한 SQL 메모리 양을 반환한다.
SELECT SUM(awe_allocated_kb) FROM sys.dm_os_memory_clerks |
SQL Server 내부 클록 수동 제어는 캐시 사이즈와 관련있다. SQL 서버 외부 클럭 수동 이동은 메모리 부족을 가져온다. Sys.dm_os_memory_cache_clock_hand DMV를 사용하여 확인 할 수 있다. Rounts_count 및 removed_all_rounds_count 값이 증가하는 경우 서버는 메모리 압력을 받고 있다.
SELECT * FROM sys.dm_os_memory_cache_clock_hands WHERE rounds_count > 0 |
캐시에 대한 자세한 정보는 Sys.dm_os_cache_counters를 사용한다.
SELECT distinct mcc.cache_address, mcc.name, mcc.type, mcc.entries_count, mcc.entries_in_use_count, mcch.removed_all_rounds_count, mcch.removed_last_round_count FROM sys.dm_os_memory_cache_counters mcc JOIN sys.dm_os_memory_cache_clock_hands mcch ON (mcc.cache_address = mcch.cache_address) |
가상 주소 공간의 정보는 sys.dm_os_virtual_address_dump DMV를 사용하여 추적 할 수 있다.
select * from sys.dm_os_virtual_address_dump |
Sys.dm_os_memory_brokers는 내부 SQL server 메모리 관리자를 사용하여 메모리 할당에 대한 정보를 제공한다. 제공된 정보는 매우 큰 메모리 소비자를 결정하는데 유용할 수 있다.
select * from sys.dm_os_memory_brokers |
Sys.dm_os_memory_nodes 및 sys.dm_os_memory_bode_access_stats은 메모리 노느당의 할당 정보와 페이지 유형별 메모리 노드의 접속 통계를 보여준다.
select * from sys.dm_os_memory_nodes select * from sys.dm_os_memory_node_access_stats |
CPU 구성에 대한 정보는 sys.dm_os_nodes로 확인 할 수 있따. 이 DMV는 소프트웨어 NUMA 구성을 반영한다.
select * from sys.dm_os_nodes |
시스템 메모리 정보는 sys.dm_os_sys_memory를 사용한다. System_memory_state_desc 열에서 "Available physical memory is low" 값이 나타난다면 외부 메모리 압력이 있는 것이다.
select * from sys.dm_os_sys_memory |
Sys.dm_os_ring_buffers에서도 메모리 정보를 확인할 수 있다. 각 링 버퍼는 마지막 알림을 기록 한다.
SELECT ring_buffer_type, COUNT(*) AS [Events] FROM sys.dm_os_ring_buffers GROUP BY ring_buffer_type ORDER BY ring_buffer_type |
- RING_BUFFER_SCHEDULER_MONITOR : 서버의 전반적인 상태에 대한 정보를 저장. SystemHealth 기록은 1분 간격으로 작성 된다.
- RING_BUFFER_RESOURCE_MONITOR : 리소스 모니터 알림을 사용하여 모든 메모리 상태 변경을 캡처 한다.
- RING_BUFFER_OOM : 메모리 부족 상태를 나타내는 레코드가 포함되어 있다.
- RING_BUFFER_MEMORY_BROKER : 리소스 관리자 리소스 풀에 의한 메모리 알림이 포함되어 있다.
- RING_BUFFER_BUFFER_POOL : 버퍼 풀의 실패 기록이 포함되어 있다.
[참고자료]
- How to Identify Microsoft SQL Server Memory Bottlenecks :
http://www.mssqltips.com/sqlservertip/2304/how-to-identify-microsoft-sql-server-memory-bottlenecks/
- DBCC MEMORYSTATUS 명령 사용 하여 SQL Server 2005에서 메모리 사용을 모니터링 하는 방법 : http://support.microsoft.com/?id=907877
- INF: DBCC MEMORYSTATUS를 사용하여 SQL Server 메모리 사용 모니터 :
2014-01-13 / 강성욱 / http://sqlmvp.kr
'SQL Server > SQL Server Tip' 카테고리의 다른 글
Ring_Buffer_Resource_Monitor (0) | 2015.07.23 |
---|---|
SQL Server 프로파일러 템플릿 만들기 (0) | 2015.07.23 |
SQL Server 시작 옵션 사용 (0) | 2015.07.23 |
Ring buffer를 활용한 External Memory Pressure 확인 (0) | 2015.07.23 |
Memory Pressure (0) | 2015.07.23 |