Soft-NUMA (SQL Server)
Dotyczy:programu SQL Server
Nowoczesne procesory mają wiele rdzeni na gniazdo. Każde gniazdo jest zwykle reprezentowane jako pojedynczy węzeł NUMA. Silnik bazy danych programu SQL Server dzieli różne struktury wewnętrzne i wątki usług na partycje, zgodnie z węzłami NUMA. W przypadku procesorów zawierających co najmniej 10 rdzeni na gniazdo, dzielenie sprzętowych węzłów NUMA przy użyciu oprogramowania NUMA zwykle zwiększa skalowalność i wydajność. Przed wprowadzeniem SQL Server 2014 (12.x) SP2 programowa architektura NUMA (soft-NUMA) wymagała edytowania rejestru w celu dodania maski koligacji konfiguracji węzła i była konfigurowana na poziomie hosta, a nie na poziomie poszczególnych instancji. Począwszy od SQL Server 2014 (12.x) SP2 i SQL Server 2016 (13.x), soft-NUMA jest konfigurowany automatycznie na poziomie instancji bazy danych przy starcie usługi SQL Server.
Procesory dodawane na gorąco nie są obsługiwane przez architekturę soft-NUMA.
Automatyczne soft-NUMA
W programie SQL Server 2016 (13.x), za każdym razem gdy aparat bazy danych programu SQL Server wykryje podczas uruchamiania więcej niż osiem rdzeni fizycznych na węzeł NUMA lub gniazdo, węzły soft-NUMA są tworzone automatycznie. Rdzenie procesorów z technologią wielowątkowości symultanicznej (SMT) nie są traktowane odrębnie przy liczeniu rdzeni fizycznych w węźle. Gdy wykryta liczba rdzeni fizycznych jest większa niż osiem na gniazdo, aparat bazy danych programu SQL Server tworzy węzły soft-NUMA, które idealnie zawierają osiem rdzeni, ale mogą zawierać od czterech do ośmiu rdzeni fizycznych na węzeł. Rozmiar węzła sprzętowego może być ograniczony przez maskę koligacji procesora CPU. Liczba węzłów NUMA nigdy nie przekracza maksymalnej liczby obsługiwanych węzłów NUMA.
Można wyłączyć lub ponownie włączyć soft-NUMA przy użyciu instrukcji ALTER SERVER CONFIGURATION z argumentem SET SOFTNUMA
. Zmiana wartości tego ustawienia wymaga ponownego uruchomienia silnika bazy danych, aby zaczęły obowiązywać.
Na poniższej ilustracji przedstawiono typ informacji dotyczących soft-NUMA widocznych w dzienniku błędów SQL Server, gdy SQL Server wykrywa sprzętowe węzły NUMA z liczbą rdzeni fizycznych większą niż osiem na każdy węzeł lub gniazdo.
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.
Notatka
Począwszy od programu SQL Server 2014 (12.x) SP 2, użyj flagi śledzenia 8079, aby zezwolić programowi SQL Server na używanie automatycznego oprogramowania NUMA. Począwszy od SQL Server 2016 (13.x), to zachowanie jest kontrolowane przez silnik i flaga śledzenia 8079 nie ma żadnego wpływu. Aby uzyskać więcej informacji, zobacz DBCC TRACEON — Trace Flags.
Ręczna konfiguracja soft-NUMA
Aby ręcznie skonfigurować serwera SQL Server do używania "soft-NUMA", wyłącz automatyczne "soft-NUMA" i edytuj rejestr, aby dodać maskę koligacji dla konfiguracji węzła. W przypadku korzystania z tej metody maska soft-NUMA może być określona jako wpis rejestru binarny, DWORD (szesnastkowy lub dziesiętny) lub QWORD (szesnastkowy lub dziesiętny). Aby skonfigurować więcej niż pierwsze 32 procesory CPU, użyj wartości rejestru QWORD lub BINARY (wartości QWORD nie mogą być używane przed programem SQL Server 2012 (11.x)). Po zmodyfikowaniu rejestru należy ponownie uruchomić aparat bazy danych, aby konfiguracja soft-NUMA weszła w życie.
Napiwek
Procesory CPU są numerowane, począwszy od 0
.
Ostrzeżenie
Niepoprawne edytowanie rejestru może poważnie uszkodzić system. Przed wprowadzeniem zmian w rejestrze zalecamy wykonanie kopii zapasowej wszystkich wartościowych danych na komputerze.
Rozważmy przykład komputera z ośmioma procesorami, które nie mają architektury NUMA. Skonfigurowano trzy węzły soft-NUMA.
Wystąpienie silnika bazy danych A jest skonfigurowane do używania CPU od 0 do 3. Drugie wystąpienie silnika bazy danych jest zainstalowane i skonfigurowane do używania procesorów od 4 do 7. Przykład może być wizualnie reprezentowany jako:
CPUs 0 1 2 3 4 5 6 7
Soft-NUMA <-N0-><-N1-><----N2---->
SQL Server <instance A><instance B>
Wystąpienie A, które doświadcza znaczącego wejścia/wyjścia, ma teraz dwa wątki I/O i jeden wątek lazy writer. Wystąpienie B, które wykonuje operacje intensywnie korzystające z procesora, ma tylko jeden wątek we/wy i jeden leniwy wątek zapisywania. Różne ilości pamięci można przypisać do wystąpień, ale w przeciwieństwie do sprzętowej architektury NUMA, obie odbierają pamięć z tego samego bloku pamięci systemu operacyjnego i nie ma koligacji pamięci do procesora.
Wątek leniwego pisarza jest powiązany z widokiem SQLOS fizycznych węzłów pamięci NUMA. Dlatego niezależnie od tego, ile sprzęt przedstawia fizycznych węzłów NUMA, taka sama liczba wątków opóźnionego zapisywania jest tworzona. Aby uzyskać więcej informacji, zobacz Jak to działa: Soft NUMA, I/O Completion Thread, Lazy Writer Workers oraz Węzły pamięci.
Notatka
Klucze rejestru Soft-NUMA nie są kopiowane podczas uaktualniania wystąpienia programu SQL Server.
Ustaw maskę koligacji procesora
Uruchom następującą instrukcję w wystąpieniu A, aby skonfigurować je do używania CPU 0, 1, 2 i 3, ustawiając maskę powiązania CPU:
ALTER SERVER CONFIGURATION
SET PROCESS AFFINITY CPU = 0 TO 3;
Uruchom następującą instrukcję na instancji B, aby skonfigurować ją do używania procesorów 4, 5, 6 i 7 poprzez ustawienie maski przypisania CPU.
ALTER SERVER CONFIGURATION
SET PROCESS AFFINITY CPU = 4 TO 7;
Mapowanie węzłów soft-NUMA na procesory
Za pomocą programu Edytor rejestru (regedit.exe
) dodaj następujące klucze rejestru, aby mapować węzeł soft-NUMA 0 na procesory CPU 0 i 1, węzeł soft-NUMA 1 na procesory CPU 2 i 3 oraz węzeł soft-NUMA 2 na procesory CPU 4, 5, 6 i 7.
Napiwek
Aby określić procesory CPU od 60 do 63, użyj wartości QWORD F000000000000000
lub wartości binarnej 1111000000000000000000000000000000000000000000000000000000000000
.
W poniższym przykładzie przyjęto założenie, że masz serwer DL580 G9 z 18 rdzeniami na gniazdo (w czterech gniazdach), a każde gniazdo znajduje się we własnej grupie K. Konfiguracja soft-NUMA, którą można utworzyć, będzie wyglądać podobnie do następującego przykładu: sześć rdzeni na węzeł, trzy węzły na grupę, cztery grupy.
Przykład wystąpienia programu SQL Server z wieloma grupami K | Typ | Nazwa wartości | Dane wartości |
---|---|---|---|
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 |
Metadane
Możesz użyć następujących widoków DMV (Dynamic Management Views), aby zobaczyć bieżący stan oraz konfigurację soft-NUMA.
sp_configure (Transact-SQL): Wyświetla bieżącą wartość (
0
lub1
) dla SOFTNUMA.sys.dm_os_sys_info (Transact-SQL): kolumny
softnuma_configuration
isoftnuma_configuration_desc
wyświetlają bieżące wartości konfiguracji.
Chociaż można wyświetlić wartość aktualną dla automatycznego soft-NUMA przy użyciu sp_configure (Transact-SQL), ale nie można zmienić jej wartości przy użyciu sp_configure
. Należy użyć instrukcji ALTER SERVER CONFIGURATION (Transact-SQL) z argumentem SET SOFTNUMA
.