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) с пакетом обновления 2 (SP2) и SQL Server 2016 (13.x), soft-NUMA автоматически настраивается на уровне экземпляра SQL Server при запуске службы ядра СУБД SQL Server.

Процессоры с возможностью горячего добавления не поддерживаются soft-NUMA.

Автоматическая soft-NUMA

В SQL Server 2016 (13.x) по умолчанию при запуске, если компонент SQL Server Database Engine обнаруживает более восьми физических ядер в каждом узле NUMA или сокете, узлы soft-NUMA создаются автоматически. Одновременные многопоточные ядра процессора (SMT) не различаются при подсчете физических ядер в узле. Если обнаруженное число физических ядер превышает восемь на сокет, ядро СУБД SQL Server создает узлы soft-NUMA, которые в идеале содержат восемь ядер, но могут сократиться до четырех или до восьми физических ядер на узел. Размер аппаратного узла может быть ограничен маской привязки к процессору. Количество узлов NUMA не может превышать максимальное количество поддерживаемых узлов NUMA.

Вы можете отключить или снова включить soft-NUMA с помощью оператора ALTER SERVER CONFIGURATION и аргумента SET SOFTNUMA. Чтобы изменение этого параметра вступило в силу, потребуется перезапустить ядро базы данных.

На рисунке ниже показано, какая информация о soft-NUMA отображается в журнале ошибок SQL Server, когда 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) с пакетом обновления 2 (SP 2) используйте флаг трассировки 8079, чтобы разрешить SQL Server использовать automatic soft-NUMA. Начиная с SQL Server 2016 (13.x), это поведение контролируется ядром СУБД, и флаг трассировки 8079 не оказывает никакого влияния. Дополнительные сведения см. в разделе "Настройка флагов трассировки с помощью DBCC TRACEON".

Вручную soft-NUMA

Чтобы вручную настроить SQL Server на использование soft-NUMA, отключите автоматический soft-NUMA и измените реестр, добавив маску привязки конфигурации узла. При использовании этого метода маску soft-NUMA можно указать в виде параметра реестра типа REG_BINARY, DWORD (шестнадцатеричного или десятичного) либо QWORD (шестнадцатеричного или десятичного). Чтобы настроить более 32 ЦП, используйте значения реестра типа QWORD или BINARY (значения QWORD нельзя использовать в версиях до SQL Server 2012 (11.x)). После изменения реестра необходимо перезапустить ядро СУБД, чтобы конфигурация soft-NUMA вступила в силу.

Совет

ЦП нумеруются начиная с 0.

Предупреждение

Неправильное редактирование реестра может серьезно повредить вашу систему. Перед внесением изменений в реестр рекомендуется создать резервную копию всех важных данных.

Рассмотрим пример компьютера с восемью ЦП, не имеющими аппаратного NUMA. Настраиваются три узла программной архитектуры NUMA. Экземпляр A компонента ядро СУБД настроен на использование процессоров с 0 по 3. Установлен и настроен на использование процессоров с 4-го по 7-й второй экземпляр компонента ядро СУБД. Визуально пример может быть представлен следующим образом.

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

Экземпляр А, испытывающий значительную нагрузку ввода-вывода, теперь имеет два потока ввода-вывода и один поток модуля отложенной записи. экземпляр B, выполняющий операции, интенсивно использующие процессор, имеет только один поток ввода-вывода и один поток отложенной записи. Экземплярам могут быть выделены разные объемы памяти, но, в отличие от аппаратной архитектуры NUMA, оба они получают память из одного и того же блока памяти операционной системы, и привязка памяти к процессору отсутствует.

Поток отложенной записи привязан к представлению SQLOS о физических узлах памяти NUMA. Таким образом, какое бы число физических узлов NUMA ни определялось аппаратным обеспечением, именно столько потоков отложенной записи и создаётся. Дополнительные сведения см. в разделе Как это работает: программная архитектура NUMA, поток завершения ввода-вывода, рабочие процессы отложенной записи и узлы памяти.

Примечание.

Разделы реестра Soft-NUMA не копируются при обновлении экземпляра SQL Server.

Установка маски схожести ЦП

Выполните следующую инструкцию в экземпляре А, чтобы настроить его для использования процессоров 0, 1, 2 и 3 путем задания маски схожести ЦП.

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

Выполните следующую инструкцию в экземпляре В, чтобы настроить его для использования процессоров 4, 5, 6 и 7 путем задания маски схожести ЦП.

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

Сопоставить узлы soft-NUMA с процессорами

С помощью программы редактирования реестра (regedit.exe) добавьте следующие разделы реестра, чтобы сопоставить узел soft-NUMA 0 с ЦП 0 и 1, узел soft-NUMA 1 с ЦП 2 и 3, а также узел soft-NUMA 2 с ЦП 4, 5, 6 и 7.

Совет

Чтобы указать ЦП 60–63, используйте значение QWORD, равное F000000000000000, или значение BINARY, равное 1111000000000000000000000000000000000000000000000000000000000000.

В приведенном ниже примере предположим, что имеется сервер DL580 G9 с 18 ядрами на сокет (в четырех сокетах) и каждый сокет находится в собственной K-группе. Конфигурация soft-NUMA, которую можно создать, будет выглядеть примерно так: шесть ядер на узел, три узла для каждой группы, четыре группы.

Пример для экземпляра SQL Server с несколькими группами K-Group Тип Имя параметра Данные значения
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

Метаданные

Для просмотра текущего состояния и конфигурации архитектуры Soft-NUMA можно использовать указанные ниже динамические административные представления.

Хотя текущее значение параметра автоматического soft-NUMA можно просмотреть с помощью sp_configure, изменить его с помощью sp_configure нельзя. Необходимо использовать инструкцию ALTER SERVER CONFIGURATION с аргументом SET SOFTNUMA .