Архитектура Soft-NUMA (SQL Server)

Применимо к:SQL Server

Современные процессоры имеют несколько ядер на одном сокете. Каждый сокет обычно представлен одним узлом NUMA. Ядро базы данных SQL Server секционирует разные внутренние структуры и потоки служб в узлы NUMA. Если используются процессоры с 10 и более ядрами на сокет, распределение нагрузки между аппаратными узлами NUMA с помощью программной архитектуры NUMA зачастую позволяет повысить масштабируемость и производительность системы. До SQL Server 2014 (12.x) с пакетом обновления 2 (SP2), программное обеспечение NUMA (soft-NUMA) требовало отредактировать реестр для добавления маски сходства конфигурации узла и было настроено на уровне узла, а не на каждом экземпляре. Начиная с SQL Server 2014 (12.x) с пакетом обновления 2 (SP2) и SQL Server 2016 (13.x), soft-NUMA настраивается автоматически на уровне экземпляра базы данных при запуске службы SQL Server ядро СУБД.

Процессоры с горячей надстройкой не поддерживаются soft-NUMA.

Автоматическое обратимое число NUMA

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

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

На рисунке ниже показан тип сведений о обратимом 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, отключите автоматическую обратимую функцию NUMA и измените реестр, чтобы добавить маску сходства конфигурации узла. Маска архитектуры Soft-NUMA в этом случае указывается как запись реестра с двоичным типом данных, типом данных DWORD (шестнадцатеричным или десятичным) или QWORD (шестнадцатеричным или десятичным). Чтобы настроить более первых 32 ЦП, используйте значения QWORD или ДВОИЧНОГО реестра (значения 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>

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

Поток модуля отложенной записи связан с представлением физических узлов памяти NUMA в SQLOS. Таким образом, независимо от того, какое оборудование представляет собой количество физических узлов 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;

Установка соответствия программной архитектуры NUMA нескольким процессорам

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

Совет

Чтобы указать ЦП 60–63, используйте значение F000000000000000 QWORD или двоичное 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 можно использовать указанные ниже динамические административные представления.

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