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

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

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
1750 SQL Server 인증 실패시 반환되는 클라이언트 메시지 정보 jevida(강성욱) 2016.09.15 3626
» SQL Server에 할당된 메모리 개체 확인 jevida(강성욱) 2016.09.15 1582
1748 SQL Server 비동기 업데이트 활성 / 비활성에 따른 특성 jevida(강성욱) 2016.09.15 1694
1747 DBCC CHECKDB와 Compute Column 인덱스의 성능 관계 jevida(강성욱) 2016.09.15 1432
1746 Collation에 따른 DMV 실행 오류 jevida(강성욱) 2016.09.15 1308
1745 참조 개체 확인 (sys.sql_expression_dependencies) jevida(강성욱) 2016.09.15 1560
1744 특정 테이블의 마지막 접근 시간 알아보기 jevida(강성욱) 2016.09.15 1237
1743 SQL Server Fill Factor (채우기 비율)에 관한 오해와 진실 jevida(강성욱) 2016.09.15 3594
1742 LOB 데이터와 Shrink 작업 jevida(강성욱) 2016.09.15 1238
1741 데이터베이스 함수 검색 하기 jevida(강성욱) 2016.09.15 1063
1740 필터 통계 사용과 파리미터 사용 jevida(강성욱) 2016.09.15 1179
1739 유지관리 계획과 병렬처리 – Index Rebuild jevida(강성욱) 2016.09.15 1065
1738 유지관리 계획과 병렬 처리 – CHECKDB jevida(강성욱) 2016.09.15 1129
1737 쿼리 사이즈(길이) 에 따른 CPU 사용량 증가 jevida(강성욱) 2016.09.14 1301
1736 Ad-hoc 쿼리를 매개변수화 하여 성능 높이기 jevida(강성욱) 2016.09.14 1652
1735 통계 업데이트 옵션(ROWCOUNT and PAGECOUNT) jevida(강성욱) 2016.09.14 1228
1734 SQL Server Plan Guide 생성 및 사용 jevida(강성욱) 2016.09.14 1418
1733 SQL Server 그래픽 실행 계획 노드 정보 jevida(강성욱) 2016.09.14 1066
1732 프로파일러를 이용한 실행계획 캡처하기 jevida(강성욱) 2016.09.14 958
1731 SQL Server 그래픽 실행 계획 및 텍스트 실행 계획 jevida(강성욱) 2016.09.14 3104





XE Login