soft-NUMA(SQL Server)

적용 대상:SQL Server

최신 프로세서에는 소켓당 여러 코어가 있습니다. 각 소켓은 일반적으로 단일 NUMA 노드로 표시됩니다. SQL Server 데이터베이스 엔진은 다양한 내부 구조를 분할하고 NUMA 노드당 서비스 스레드를 분할합니다. 소켓당 10개 이상의 코어를 포함하는 프로세서에서 소프트웨어 NUMA를 사용하여 하드웨어 NUMA 노드를 분할하면 일반적으로 확장성과 성능이 향상됩니다. SQL Server 2014(12.x) SP2 이전에는 소프트웨어 기반 NUMA(soft-NUMA)를 사용하여 노드 구성 선호도 마스크를 추가하도록 레지스트리를 편집해야 하지만 인스턴스가 아닌 호스트 수준에서 구성되었습니다. SQL Server 2014(12.x) SP2 및 SQL Server 2016(13.x)부터 SQL Server 데이터베이스 엔진 서비스가 시작될 때 Soft-NUMA가 데이터베이스 인스턴스 수준에서 자동으로 구성됩니다.

핫 추가 프로세서는 soft-NUMA에서 지원되지 않습니다.

자동 소프트 NUMA

SQL Server 2016(13.x)에서는 SQL Server 데이터베이스 엔진이 시작 시 NUMA 노드 또는 소켓당 8개를 초과하는 물리적 코어를 검색할 때마다 soft-NUMA 노드가 기본적으로 자동 생성됩니다. 노드에서 물리적 코어를 계산할 때 SMT(동시 다중 스레딩) 프로세서 코어는 구분되지 않습니다. 실제 코어 수가 소켓당 8개를 초과하여 감지된 경우 SQL Server 데이터베이스 엔진은 코어 8개를 포함하는 이상적인 soft-NUMA 노드를 만들지만 노드당 논리 코어가 5개 또는 최대 9개까지 감소하거나 증가할 수 있습니다. 하드웨어 노드의 크기는 CPU 선호도 마스크로 제한할 수 있습니다. NUMA 노드 수는 지원되는 최대 NUMA 노드 수를 초과하지 않습니다.

SET SOFTNUMA 인수와 함께 ALTER SERVER CONFIGURATION(Transact-SQL) 문을 사용하여 soft-NUMA를 사용하지 않도록 설정하거나 다시 사용하도록 설정할 수 있습니다. 이 설정의 값을 변경하려면 데이터베이스 엔진의 다시 시작을 적용해야 합니다.

아래 그림은 SQL Server가 각 노드 또는 소켓당 8개 이상의 물리적 코어가 있는 하드웨어 NUMA 노드를 감지할 때 SQL Server 오류 로그에 표시되는 소프트 NUMA 관련 정보 유형을 보여줍니다.

2016-11-14 13:39:43.17 Server      SQL Server detected 2 sockets with 12 cores per socket and 24 logical processors per socket, 48 total logical processors; using 48 logical processors based on SQL Server licensing. This is an informational message; no user action is required.
2016-11-14 13:39:43.35 Server      Automatic soft-NUMA was enabled because SQL Server has detected hardware NUMA nodes with greater than 8 physical cores.
2016-11-14 13:39:43.63 Server      Node configuration: node 0: CPU mask: 0x0000000000555555:0 Active CPU mask: 0x0000000000555555:0. This message provides a description of the NUMA configuration for this computer. This is an informational message only. No user action is required.
2016-11-14 13:39:43.63 Server      Node configuration: node 1: CPU mask: 0x0000000000aaaaaa:0 Active CPU mask: 0x0000000000aaaaaa:0. This message provides a description of the NUMA configuration for this computer. This is an informational message only. No user action is required.
2016-11-14 13:39:43.63 Server      Node configuration: node 2: CPU mask: 0x0000555555000000:0 Active CPU mask: 0x0000555555000000:0. This message provides a description of the NUMA configuration for this computer. This is an informational message only. No user action is required.
2016-11-14 13:39:43.63 Server      Node configuration: node 3: CPU mask: 0x0000aaaaaa000000:0 Active CPU mask: 0x0000aaaaaa000000:0. This message provides a description of the NUMA configuration for this computer. This is an informational message only. No user action is required.

참고 항목

SQL Server 2014(12.x) SP 2부터 추적 플래그 8079를 사용하여 SQL Server에서 자동 soft-NUMA를 사용할 수 있도록 합니다. SQL Server 2016(13.x)부터 이 동작은 엔진에서 제어되며, 8079 추적 플래그는 아무 효과가 없습니다. 자세한 내용은 DBCC TRACEON - 추적 플래그를 참조하세요.

수동 소프트 NUMA

soft-NUMA를 사용하도록 SQL Server를 수동으로 구성하려면 자동 soft-NUMA를 사용하지 않도록 설정하고 레지스트리를 편집하여 노드 구성 선호도 마스크를 추가합니다. 이 메서드를 사용하는 경우 소프트 NUMA 마스크를 이진, DWORD(16진수 또는 10진수) 또는 QWORD(16진수 또는 10진수) 레지스트리 항목으로 지정할 수 있습니다. 처음 32개 이상의 CPU를 구성하려면 QWORD 또는 BINARY 레지스트리 값을 사용합니다(QWORD 값은 SQL Server 2012(11.x) 이전에는 사용할 수 없습니다.) 레지스트리를 수정한 후 soft-NUMA 구성이 적용되려면 데이터베이스 엔진을 다시 시작해야 합니다.

CPU는 0로 시작하는 번호가 매겨집니다.

Warning

레지스트리를 올바르게 편집하지 않으면 시스템을 심각하게 손상시킬 수 있습니다. 따라서 레지스트리를 변경하기 전에 컴퓨터의 중요한 데이터는 백업해 두는 것이 좋습니다.

하드웨어 NUMA가 없는 8개의 CPU가 있는 컴퓨터의 예를 생각해 보세요. 3개의 소프트 NUMA 노드가 구성되어 있습니다.
데이터베이스 엔진 인스턴스 A는 CPU를 0부터 3까지 사용하도록 구성됩니다. 데이터베이스 엔진 두 번째 인스턴스가 설치되고 CPU 4~7을 사용하도록 구성됩니다. 이 예제는 다음과 같이 시각적으로 나타낼 수 있습니다.

CPUs         0  1  2  3  4  5  6  7
Soft-NUMA   <-N0-><-N1-><----N2---->
SQL Server  <instance A><instance B>

상당한 I/O를 경험하는 인스턴스 A에는 이제 두 개의 I/O 스레드와 하나의 지연 기록기 스레드가 있습니다. 프로세서 집약적 작업을 수행하는 인스턴스 B에는 하나의 I/O 스레드와 하나의 지연 기록기 스레드만 있습니다. 서로 다른 양의 메모리를 인스턴스에 할당할 수 있지만 하드웨어 NUMA와 달리 둘 다 동일한 운영 체제 메모리 블록에서 메모리를 수신하며 메모리 대 프로세서 선호도는 없습니다.

지연 기록기 스레드는 실제 NUMA 메모리 노드의 SQLOS 뷰에 연결됩니다. 따라서 하드웨어가 실제 NUMA 노드 수로 표시되는 것이 무엇이든 간에 생성되는 지연 기록기 스레드의 수입니다. 자세한 내용은 소프트 NUMA, I/O 완료 스레드, 지연 기록기 작업자 및 메모리 노드의 작동 방식을 참조하세요.

참고 항목

SQL Server 인스턴스를 업그레이드할 때는 Soft-NUMA 레지스트리 키가 복사되지 않습니다.

CPU 선호도 마스크 설정

인스턴스 A에서 다음 문을 실행하여 CPU 선호도 마스크를 설정하여 CPU 0, 1, 2 및 3을 사용하도록 구성합니다.

ALTER SERVER CONFIGURATION
SET PROCESS AFFINITY CPU = 0 TO 3;

인스턴스 B에서 다음 문을 실행하여 CPU 선호도 마스크를 설정하여 CPU 4, 5, 6 및 7을 사용하도록 구성합니다.

ALTER SERVER CONFIGURATION
SET PROCESS AFFINITY CPU = 4 TO 7;

CPU에 Soft-NUMA 노드 매핑

레지스트리 편집기 프로그램(regedit.exe)을 사용하여 다음 레지스트리 키를 추가하여 SOFT-NUMA 노드 0을 CPU 0 및 1에 매핑하고, 소프트 NUMA 노드 1을 CPU 2 및 3으로, 소프트 NUMA 노드 2를 CPU 4, 5, 6 및 7에 매핑합니다.

CPU 60~63을 지정하려면 QWORD 값 F000000000000000 또는 BINARY 값 1111000000000000000000000000000000000000000000000000000000000000을 사용합니다.

다음 예제에서는 DL580 G9 서버가 있고 4개의 소켓에서 소켓당 18개의 코어가 있으며 각 소켓은 자체 K 그룹에 있다고 가정합니다. 만들 수 있는 소프트 NUMA 구성은 노드당 코어 6개, 그룹당 노드 3개, 그룹 4개 예제와 같습니다.

여러 K 그룹이 있는 SQL Server 인스턴스의 예 Type 값 이름 값 데이터
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node0 DWORD CPUMask 0x3f
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node0 DWORD Group 0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node1 DWORD CPUMask 0x0fc0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node1 DWORD Group 0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node2 DWORD CPUMask 0x3f000
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node2 DWORD Group 0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node3 DWORD CPUMask 0x3f
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node3 DWORD Group 1
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node4 DWORD CPUMask 0x0fc0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node4 DWORD Group 1
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node5 DWORD CPUMask 0x3f000
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node5 DWORD Group 1
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node6 DWORD CPUMask 0x3f
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node6 DWORD Group 2
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node7 DWORD CPUMask 0x0fc0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node7 DWORD Group 2
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node8 DWORD CPUMask 0x3f000
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node8 DWORD Group 2
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node9 DWORD CPUMask 0x3f
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node9 DWORD Group 3
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node10 DWORD CPUMask 0x0fc0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node10 DWORD Group 3
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node11 DWORD CPUMask 0x3f000
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node11 DWORD Group 3

메타데이터

다음 DMV를 사용하여 soft-NUMA의 현재 상태 및 구성을 볼 수 있습니다.

sp_configure(Transact-SQL)를 사용하여 자동 soft-NUMA에 대한 실행 값을 볼 수 있지만 sp_configure를 사용하여 해당 값을 변경할 수는 없습니다. SET SOFTNUMA 인수가 포함된 ALTER SERVER CONFIGURATION(Transact-SQL) 문을 사용해야 합니다.