NUMA Node 메모리 블록

jevida(강성욱) 2016.10.11 03:31 Views : 1085

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

 

 


강성욱 / 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 32239
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 16380
1874 AppDomain unloading 오류 로그 – CLR 오류 jevida(강성욱) 2016.10.11 1238
1873 SQL Server IO and Latch 설명 jevida(강성욱) 2016.10.11 3751
1872 마지막 백업 시간 및 DBCC 확인 [1] jevida(강성욱) 2016.10.08 1650
1871 DMV를 활용한 CPU 트러블슈팅 - Sys.dm_exec_query_stats, sys.dm_os_ring_buffers 활용 [1] jevida(강성욱) 2016.10.08 2023
1870 백업 미디어 세트에 압축 백업 추가하기 jevida(강성욱) 2016.10.08 1570
1869 Collation에 따른 실행계획 변경과 성능 문제 jevida(강성욱) 2016.10.08 1718
1868 SQL Connection Timeout 디버깅 with BizTalk Server jevida(강성욱) 2016.10.08 2401
1867 인스턴스 파일 초기화 활성 jevida(강성욱) 2016.10.08 1782
1866 누락된 인덱스 확인하기 jevida(강성욱) 2016.10.08 3319
1865 비클러스터 인덱스 페이지 내용 jevida(강성욱) 2016.10.08 2067
1864 ATTACH DATABASE 오류 1314 jevida(강성욱) 2016.10.08 1205
1863 SQL Server 커넥션 풀링 jevida(강성욱) 2016.10.08 4708
1862 가상 SQL Server에 Hot Add vCPU 사용하기 jevida(강성욱) 2016.10.08 1149
1861 DDL 트리거를 활용한 ERRORLOG에 XEVENT 상태 기록하기 jevida(강성욱) 2016.10.08 1430
1860 쉐어포인트의 SQL Server 접속 문제 jevida(강성욱) 2016.10.08 1516
1859 Lazy Log Truncation jevida(강성욱) 2016.10.08 1396
1858 인덱스 구성과 상황에 따른 인덱스 성능 jevida(강성욱) 2016.10.08 1528
1857 Max worker thread 초과 이슈 jevida(강성욱) 2016.10.08 3139
1856 SQL Server Failover 클러스터 설치 트러블슈팅 jevida(강성욱) 2016.10.08 2549
1855 MAXDOP 극대화 하기 jevida(강성욱) 2016.10.08 2319





XE Login