SQL Server/SQL Server Tip

SQL Server 메모리 병목 현상 식별

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

SQL Server 메모리 병목 현상 식별

 

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

 

SQL Server의 메모리 사용량을 확인하기 위해 DBCC MEMORYSTATUS 및 DMV를 사용할 수 있다.

 

[DBCC MEMORYSTATUS]

DBCC MEMORYSTATUS는 현재 메모리 상태의 스냅샷을 제공한다.

dbcc memorystatus

 

각 항목에 대한 정보는 다음 링크를 참고 한다.

 

 

[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/

 

 

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

 

반응형