NUMA Node 메모리 블록

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

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 2023년 1월 - SQLER의 업데이트 강좌 리스트 코난(김대우) 2023.01.02 598
1886 SQL Server Geography 및 Geometory 데이터 형식 jevida(강성욱) 2016.10.11 2524
1885 SQL Server를 이용한 신용카드 보안 -조직이 PCI DSS 준수를 달성 하기 위한 요건 jevida(강성욱) 2016.10.11 1395
1884 TDE 암호화 사용하기 jevida(강성욱) 2016.10.11 3543
1883 SQL Server 암호화 하기 jevida(강성욱) 2016.10.11 2795
1882 의도하지 않은 분산트랜잭션 사용 jevida(강성욱) 2016.10.11 903
1881 Affinity I/O Mask jevida(강성욱) 2016.10.11 1188
1880 LPE_BATCH 스핀락 jevida(강성욱) 2016.10.11 905
1879 SQL Server 17953 오류 jevida(강성욱) 2016.10.11 1032
1878 SQL 연결 18056 오류 jevida(강성욱) 2016.10.11 1385
1877 SQL 2008 R2 Sp1 적용과 9013 오류 - 포맷 섹터 크기에 따른 오류 jevida(강성욱) 2016.10.11 1920
1876 JDBC 로깅 파일 위치 설정 jevida(강성욱) 2016.10.11 982
» NUMA Node 메모리 블록 jevida(강성욱) 2016.10.11 1059
1874 AppDomain unloading 오류 로그 – CLR 오류 jevida(강성욱) 2016.10.11 1214
1873 SQL Server IO and Latch 설명 jevida(강성욱) 2016.10.11 3425
1872 마지막 백업 시간 및 DBCC 확인 [1] jevida(강성욱) 2016.10.08 1626
1871 DMV를 활용한 CPU 트러블슈팅 - Sys.dm_exec_query_stats, sys.dm_os_ring_buffers 활용 [1] jevida(강성욱) 2016.10.08 1957
1870 백업 미디어 세트에 압축 백업 추가하기 jevida(강성욱) 2016.10.08 1509
1869 Collation에 따른 실행계획 변경과 성능 문제 jevida(강성욱) 2016.10.08 1703
1868 SQL Connection Timeout 디버깅 with BizTalk Server jevida(강성욱) 2016.10.08 2345
1867 인스턴스 파일 초기화 활성 jevida(강성욱) 2016.10.08 1752





XE Login