반응형

NUMA Node 메모리 블록

 

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

 

NUMA 아키텍처는 각 프로세서 그룹에 자체 메모리가 있으며 자체 I/O 채널이 있는 경우도 있다. 그러나 각 CPU는 일관된 방법으로 다른 그룹과 연결된 메모리에 액세스 한다. 각 그룹을 NUMA노드라 한다.

 

NUMA에 대한 내용은 다음 아티클을 참고하여 이해를 할 수 있도록 한다.

 

이번 시간은 CSS SQL Server Engineers 블로그에 게시된 내용으로 필자가 읽고 이해한 내용을 정리하였다. 번역의 오류나 기술적 오류가 있음을 미리 알려둔다. 자세한 내용은 원문을 참고 하길 바란다.

 

(특히 이번 포스트는 원문을 꼭 볼 것. 해석의 오류 가능성이 큼)

 

NUMA 노드는 QueryVirtualMemoryEX 윈도우 API를 사용하여 운영체제의 물리적인 페이지를 얻을 수 있다. SQL Server는 메모리 할당의 지역성을 추적하기 위해 이 API를 사용한다.

 

SQL Server는 가능한 로컬 메모리 노드를 사용하기 때문에 성능 추적이 매우 중요하다. 원격 노드에 메모리 액세스(원격 메모리/외부 메모리)가 발생하는 경우 불필요한 지연을 초래 하여 로커 로컬 노드에 접근하는 것보다 시간이 오래 걸려 성능이 저하 된다.

 

메모리 블록이 할당되면 SQL Server는 각 운영 시스템 페이지에서 보이는 물리적인 메모리 노드를 볼 수 있다. 메모리 노드의 할당에 따라 메모리 관리자는 다르게 동작한다.

Type

Description

Local

The memory is physically present on the same NUMA node as the SQL Server worker.

Away

The memory is known to belong to a remote node and the memory manager is still in the GROWTH (often initial ramp-up phase.) The memory is held on the away list until SQL Server requires its use.

Foreign

The memory is known to belong to a remote node and SQL Server has transitioned from the GROWTH phase because max server memory has been achieved. The memory block is being used remotely

 

노드는 대체로 서로 독립적으로 작동한다. 노드에 대한 모든 메모리 할당 및 메모리 할당 취소는 해당 노드와 연결된 메모리를 사용하여 수행 된다. 그러나 노드 N1에서 실행 중인 작업자가 노드 N2의 메모리에 있는 데이터베이스 페이지에 액세스해야 하는 경우에는 로컬이 아닌 메모리에 액세스 한다.

 

DBCC MEMEORYSTATUS를 사용하여 메모리의 할당 및 동작을 확인할 수 있다.

DBCC MEMORYSTATUS

 

 

 

각 물리적 NUMA 노드에 대해 하나의 SQL Server 메모리 노드가 있다. 메모리 노드는 서로 독립적으로 증가하지만 메모리는 균일하게 나눈다.

 

아래 그림을 보면 현재 원격 메모리와 로컬 메모리 할당 패턴을 볼 수 있다.

 

 

다음 그림은 메모리 관리자가 외부 메모리 블록의 증가 및 분포 출력 변경을 표시한 것이다. 모든 밸런싱 및 메모리 블록 할당이 완료되고 32KB의 예제 메모리만 노드1의 외부 메모리에 남아 있다.

 

 

 

[참고자료]

http://technet.microsoft.com/ko-kr/library/ms178144(v=sql.105).aspx

  • NUMA에서 버퍼 풀 증가 및 축소 :

http://technet.microsoft.com/ko-kr/library/ms345403(v=sql.105).aspx

 

 

2013-11-04 / 강성욱 / http://sqlmvp.kr

 

반응형

+ Recent posts