SQL Server에 할당된 메모리 개체 확인

 

  • Version : SQL Server 2008, 2008R2, 2012

 

최근 들어 내가 관리하는 서버에 다음과 같인 Memory pressure라는 에러 로그를 확인 하였다.

 

이 에러는 무엇 일까? 왜 일어 났을까?

 

Memory prossure는 SQL Server에서 시스템 메모리의 압박을 받을 때 메모리의 내용을 드릴다운 하여 발생 한다. 나의 경우에는 CLR을 사용하는 부분이 있는데 이 부분에서 개체 할당에 대한 압력 있을 때 발생 한다. (대부분 닷넷 코드를 잘못 만들었을 때 발생 하는 듯 하다.)

 

그렇다면 현재 할당되어 있는 메모리 개체 정보를 확인 하는 방법은 없을까? 다음 DMV를 통하여 확인 할 수 있다.

SELECT

    SUM (omo.pages_allocated_count * omo.page_size_in_bytes)/1024 as 'KB_Used',

    omo.type as 'Memory Object Type', omc.type as 'Memory Clerk Type'

FROM sys.dm_os_memory_objects omo

    join sys.dm_os_memory_clerks omc on omo.page_allocator_address=omc.page_allocator_address

GROUP BY omo.type, omc.type, omc.type

ORDER BY 1 DESC;

 

 

[Sys.dm_os_memory_objects]

SQL Server에 의해 현재 할당된 메모리 개체를 반환. 메모리 사용을 분석하고 발생 가능한 메모리 손실을 확인하는 데 사용.

  • 메모리 개체는 힙으로 메모리 클럭보다 세분화딘 할당 기능을 제공
  • 메모리 개체는 메모리 클럭의 페이지 할당자 인터페이스를 사용하여 페이지를 할당
  • 가상 또는 공유메모리 인터페이스 사용하지 않음
  • 구성 용소는 할당 패턴에 따라 여러 다른 유형의 메모리 개체를 만들의 임의의 크리를 가진 영역을 할당 할 수 있음.
  • 메모리 개체의 일반적인 크기는 8KB, 증분 메모리 개체는 512B와 8KB사이의 크기를 가짐

 

[sys.dm_os_memory_clerks]

  • SQL Server 인스턴스에서 현재 활성 상태인 모든 메모리 클럭을 반환.
  • SQL Server 메모리 관리자의 계층 구조는 3계층으로 이루어져 있음

메모리 개체

메모리 클럭, 메모리 캐시, 메모리 풀

메모리 노드

 

  • 메모리 노드는 하위 수준 할당자에 대한 인터페이스와 구현을 제공
  • SQL Server내에서는 메모리 클럭만 메모리 노드에 액세스 가능. 메모리 노드 인터페이스에 접근하여 메모리 할당

 

 

다음 스크립트는 sys.dm_os_virtual_address_dump DMV를 통하여 블록 사이즈를 확인 하는 스크립트 이다.

WITH VAS_Summary AS(

SELECT Size = VAS_Dump.Size, Reserved = SUM(CASE(CONVERT(INT, VAS_Dump.Base) ^ 0) WHEN 0 THEN 0 ELSE 1 END),

Free = SUM(CASE(CONVERT(INT, VAS_Dump.Base) ^ 0) WHEN 0 THEN 1 ELSE 0 END)

FROM (SELECT

            CONVERT(VARBINARY, SUM(region_size_in_bytes)) [Size],

            region_allocation_base_address [Base]

         FROM sys.dm_os_virtual_address_dump

         WHERE region_allocation_base_address <> 0

         GROUP BY region_allocation_base_address

        

         UNION

        

         SELECT

            CONVERT(VARBINARY, region_size_in_bytes) [Size],

            region_allocation_base_address [Base]

         FROM sys.dm_os_virtual_address_dump

         WHERE region_allocation_base_address = 0x0 ) AS VAS_Dump

         GROUP BY Size

         )

SELECT SUM(CONVERT(BIGINT, Size) * Free) / 1024 AS [Total avail mem, KB], CAST(MAX(Size) AS BIGINT) / 1024 AS [Max free size, KB]FROM VAS_Summary WHERE FREE <> 0

 

 

 

CLR, 확장 저장 프로시저 사용 등 외부 메모리를 사용하는 경우 메모리에 대한 이슈를 잘 고려하여 사용 할 수 있도록 한다.

 

[참고자료]

http://www.sqlserver-dba.com/2013/03/memory-objects-allocated-by-sql-server.html

http://www.johnsansom.com/sql-server-memory-configuration-determining-memtoleave-settings/

 


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

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 38458
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 20748
1754 SQL Server 페이지 및 익스텐트 아키텍처(2/4) – 익스텐트 할당 및 빈공간 관리 jevida(강성욱) 2016.09.27 1644
1753 SQL Server 페이지 및 익스텐트 아키텍처(1/4) – 페이지 및 익스텐트 이해 jevida(강성욱) 2016.09.27 4038
1752 SQL Server Error Log 보관 주기 설정 jevida(강성욱) 2016.09.15 2332
1751 SQL Server 네트워크 백업 트러블슈팅(UNC 설정) jevida(강성욱) 2016.09.15 5473
1750 SQL Server 인증 실패시 반환되는 클라이언트 메시지 정보 jevida(강성욱) 2016.09.15 4279
» SQL Server에 할당된 메모리 개체 확인 jevida(강성욱) 2016.09.15 1649
1748 SQL Server 비동기 업데이트 활성 / 비활성에 따른 특성 jevida(강성욱) 2016.09.15 2038
1747 DBCC CHECKDB와 Compute Column 인덱스의 성능 관계 jevida(강성욱) 2016.09.15 1544
1746 Collation에 따른 DMV 실행 오류 jevida(강성욱) 2016.09.15 1373
1745 참조 개체 확인 (sys.sql_expression_dependencies) jevida(강성욱) 2016.09.15 1725
1744 특정 테이블의 마지막 접근 시간 알아보기 jevida(강성욱) 2016.09.15 1304
1743 SQL Server Fill Factor (채우기 비율)에 관한 오해와 진실 jevida(강성욱) 2016.09.15 4935
1742 LOB 데이터와 Shrink 작업 jevida(강성욱) 2016.09.15 1304
1741 데이터베이스 함수 검색 하기 jevida(강성욱) 2016.09.15 1125
1740 필터 통계 사용과 파리미터 사용 jevida(강성욱) 2016.09.15 1258
1739 유지관리 계획과 병렬처리 – Index Rebuild jevida(강성욱) 2016.09.15 1138
1738 유지관리 계획과 병렬 처리 – CHECKDB jevida(강성욱) 2016.09.15 1218
1737 쿼리 사이즈(길이) 에 따른 CPU 사용량 증가 jevida(강성욱) 2016.09.14 1370
1736 Ad-hoc 쿼리를 매개변수화 하여 성능 높이기 jevida(강성욱) 2016.09.14 1761
1735 통계 업데이트 옵션(ROWCOUNT and PAGECOUNT) jevida(강성욱) 2016.09.14 1310





XE Login