데이터베이스 개발자 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
1763 SQL Server 테이블 및 인덱스 구조 아키텍처(2/4) – 힙 구조 jevida(강성욱) 2016.09.27 1093
1762 SQL Server 테이블 및 인덱스 구조 아키텍처(1/4) – 테이블 및 인덱스 구성 jevida(강성욱) 2016.09.27 1156
1761 SQL Server 트랜잭션 로그 아키텍처(4/4) – 미리 쓰기 트랜잭션 로그 jevida(강성욱) 2016.09.27 1552
1760 SQL Server 트랜잭션 로그 아키텍처(3/4) – 검사점 및 로그의 활성 부분 jevida(강성욱) 2016.09.27 1062
1759 SQL Server 트랜잭션 로그 아키텍처(2/4) – 트랜잭션 로그 물리 아키텍처 jevida(강성욱) 2016.09.27 1116
1758 SQL Server 트랜잭션 로그 아키텍처(1/4) – 트랜잭션 로그 논리 아키텍처 jevida(강성욱) 2016.09.27 1273
1757 파일 및 파일 그룹 아키텍처 jevida(강성욱) 2016.09.27 819
1756 SQL Server 페이지 및 익스텐트 아키텍처(4/4) – 수정된 익스텐트 추적 jevida(강성욱) 2016.09.27 1154
1755 SQL Server 페이지 및 익스텐트 아키텍처(3/4) – 개체에서 사용하는 공간 관리 jevida(강성욱) 2016.09.27 1004
1754 SQL Server 페이지 및 익스텐트 아키텍처(2/4) – 익스텐트 할당 및 빈공간 관리 jevida(강성욱) 2016.09.27 1556
1753 SQL Server 페이지 및 익스텐트 아키텍처(1/4) – 페이지 및 익스텐트 이해 jevida(강성욱) 2016.09.27 3893
1752 SQL Server Error Log 보관 주기 설정 jevida(강성욱) 2016.09.15 2226
1751 SQL Server 네트워크 백업 트러블슈팅(UNC 설정) jevida(강성욱) 2016.09.15 5311
1750 SQL Server 인증 실패시 반환되는 클라이언트 메시지 정보 jevida(강성욱) 2016.09.15 4103
» SQL Server에 할당된 메모리 개체 확인 jevida(강성욱) 2016.09.15 1600
1748 SQL Server 비동기 업데이트 활성 / 비활성에 따른 특성 jevida(강성욱) 2016.09.15 1787
1747 DBCC CHECKDB와 Compute Column 인덱스의 성능 관계 jevida(강성욱) 2016.09.15 1459
1746 Collation에 따른 DMV 실행 오류 jevida(강성욱) 2016.09.15 1335
1745 참조 개체 확인 (sys.sql_expression_dependencies) jevida(강성욱) 2016.09.15 1616
1744 특정 테이블의 마지막 접근 시간 알아보기 jevida(강성욱) 2016.09.15 1260





XE Login