Sdílet prostřednictvím


Soft-NUMA (SQL Server)

platí pro:SQL Server

Moderní procesory mají více jader na soket. Každý soket je obvykle reprezentován jako jeden uzel NUMA. Databázový stroj SQL Serveru rozděluje různé interní struktury a vlákna služeb podle uzlů NUMA. S procesory obsahujícími 10 nebo více jader na soket, použití softwarové technologie NUMA k rozdělení hardwarových uzlů NUMA obecně zvyšuje škálovatelnost a výkon. Před SQL Serverem 2014 (12.x) SP2 vyžadovala softwarová technologie NUMA (soft-NUMA) úpravu registru pro přidání masky spřažení konfigurace uzlu a byla nakonfigurována na úrovni hostitele, a ne na každou instanci. Počínaje SQL Serverem 2014 (12.x) SP2 a SQL Serverem 2016 (13.x) se při spuštění služby databázového stroje SQL Serveru nakonfiguruje technologie Soft-NUMA automaticky na úrovni instance databáze.

Technologie Soft-NUMA nepodporuje procesory s horkým přidáním.

Automatická soft-NUMA

S SQL Serverem 2016 (13.x) se při spuštění, pokud databázový stroj SQL Serveru zjistí více než osm fyzických jader na uzel NUMA nebo soket, automaticky vytvoří uzly soft-NUMA. Souběžná jádra procesoru SMT (Multithreading) se při počítání fyzických jader v uzlu nerozlišují. Když je zjištěný počet fyzických jader větší než osm na soket, databázový stroj SQL Serveru vytvoří soft-NUMA uzly, které ideálně obsahují osm jader, ale mohou mít od čtyř do osmi fyzických jader na jeden uzel. Velikost hardwarového uzlu může být omezená maskou spřažení procesoru. Počet uzlů NUMA nikdy nepřekročí maximální počet podporovaných uzlů NUMA.

Pomocí příkazu ALTER SERVER CONFIGURATION s argumentem SET SOFTNUMA můžete zakázat nebo znovu povolit soft-NUMA. Změna hodnoty tohoto nastavení vyžaduje, aby se projevilo restartování databázového stroje.

Následující obrázek znázorňuje typ informací týkajících se soft-NUMA, které vidíte v protokolu chyb SQL Serveru, když SQL Server zjistí hardwarové uzly NUMA s více než osmi fyzickými jádry na každý uzel nebo soket.

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.

Poznámka

Počínaje SQL Serverem 2014 (12.x) SP 2 použijte příznak trasování 8079 a umožněte SQL Serveru používat Automatickou soft-NUMA. Od SQL Serveru 2016 (13.x) toto chování řídí modul a příznak trasování 8079 nemá žádný vliv. Další informace naleznete v tématu DBCC TRACEON - Trace Flags.

Ruční soft-NUMA

Chcete-li ručně nakonfigurovat SQL Server pro použití soft-NUMA, zakažte automatické soft-NUMA a upravte registr, abyste přidali masku afinity konfigurace uzlu. Při použití této metody lze masku soft-NUMA uvést jako binární, DWORD (šestnáctkové nebo desetinné číslo) nebo položku registru QWORD (šestnáctkové nebo desetinné číslo). Pokud chcete nakonfigurovat více než prvních 32 procesorů, použijte hodnoty registru QWORD nebo BINARY (hodnoty QWORD se nedají použít před SQL Serverem 2012 (11.x)). Po úpravě registru je nutné restartovat databázový stroj, aby se projevila konfigurace soft-NUMA.

Spropitné

Procesory jsou očíslovány počínaje 0.

Varování

Nesprávná úprava registru může vážně poškodit systém. Před provedením změn registru doporučujeme zálohovat všechna hodnotná data v počítači.

Představte si příklad počítače s osmi procesory, které nemají hardware NUMA. Jsou nakonfigurované tři uzly soft-NUMA.
Instance databázového stroje A je nakonfigurovaná tak, aby používala procesory 0 až 3. Druhá instance databázového stroje je nainstalovaná a nakonfigurovaná tak, aby používala procesory 4 až 7. Příklad může být vizuálně reprezentován takto:

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

Instance A, která má významné vstupně-výstupní operace, teď má dvě vstupně-výstupní vlákna a jedno opožděné zapisovačové vlákno. Instance B, která provádí operace náročné na procesor, má pouze jedno vstupně-výstupní vlákno a jedno opožděné zapisovačové vlákno. K instancím je možné přiřadit různé množství paměti, ale na rozdíl od hardwarového NUMA obě přijímají paměť ze stejného bloku paměti operačního systému a není zde žádná vazba paměti na procesor.

Opožděné vlákno zapisovače je vázáno na zobrazení SQLOS fyzických uzlů paměti NUMA. Proto ať hardware uvádí jakýkoli počet fyzických uzlů NUMA, jedná se o počet vláken líného zapisovače, která jsou vytvořena. Další informace naleznete v tématu Jak to funguje: soft NUMA, vstupně-výstupní vlákno dokončení, opožděné zapisovací procesy a paměťové uzly.

Poznámka

Klíče registru Soft-NUMA se při upgradu instance SQL Serveru nekopírují.

Nastavit masku spřažení procesoru

Spuštěním následujícího příkazu v instanci A ji nakonfigurujte tak, aby používala procesory 0, 1, 2 a 3 nastavením masky spřažení procesoru:

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

Spuštěním následujícího příkazu v instanci B ji nakonfigurujte tak, aby používala procesory 4, 5, 6 a 7 nastavením masky spřažení procesoru:

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

Mapování uzlů soft-NUMA na procesory

Pomocí programu Editor registru (regedit.exe) přidejte následující klíče registru, které mapují uzly soft-NUMA 0 na procesory 0 a 1, uzly soft-NUMA 1 na procesory 2 a 3 a soft-NUMA node 2 na procesory 4, 5, 6 a 7.

Spropitné

Chcete-li zadat procesory 60 až 63, použijte hodnotu QWORD F000000000000000 nebo BINÁRNÍ hodnotu 1111000000000000000000000000000000000000000000000000000000000000.

V následujícím příkladu předpokládejme, že máte server DL580 G9 s 18 jádry na soket (ve čtyřech soketech) a každý soket je ve své vlastní skupině K. Konfigurace technologie NUMA, kterou byste mohli vytvořit, by vypadala přibližně jako v následujícím příkladu: šest jader na uzel, tři uzly na skupinu, čtyři skupiny.

Příklad instance SQL Serveru s několika skupinami K-Groups Typ Název hodnoty Data hodnoty
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 (číselný datový typ používaný v programování) 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

Metadata

Pomocí následujících DMV můžete zobrazit aktuální stav a konfiguraci soft-NUMA.

  • sp_configure (Transact-SQL): Zobrazí aktuální hodnotu (0 nebo 1) pro SOFTNUMA.

  • sys.dm_os_sys_info (Transact-SQL): Sloupce softnuma_configuration a softnuma_configuration_desc zobrazují aktuální konfigurační hodnoty.

I když můžete zobrazit aktuální hodnotu pro automatickou technologii soft-NUMA pomocí sp_configure (Transact-SQL), nemůžete změnit její hodnotu pomocí sp_configure. Musíte použít příkaz ALTER SERVER CONFIGURATION (Transact-SQL) s argumentem SET SOFTNUMA.