Поделиться через


Настройка использования программной архитектуры NUMA (SQL Server) в SQL Server

Современные процессоры имеют несколько или множество ядер на одном сокете. Каждый сокет обычно представлен одним узлом NUMA. Ядро базы данных SQL Server секционирует разные внутренние структуры и потоки служб в узлы NUMA. Если процессоры содержат 10 или более ядер на сокет, использование программного обеспечения NUMA (soft-NUMA) для разделения аппаратных узлов NUMA обычно повышает масштабируемость и производительность.

Примечание

Архитектура Soft-NUMA не поддерживает процессоры с "горячей" заменой.

Автоматическое создание архитектуры Soft-NUMA

Начиная с SQL Server 2014 с пакетом обновления 2 (SP2), каждый раз, когда сервер ядра СУБД обнаруживает более 8 физических процессоров при запуске, узлы soft-NUMA создаются автоматически, если флаг трассировки 8079 включен в качестве параметра запуска. Ядра hyper-threaded процессора не учитываются при подсчете физических процессоров. Если число обнаруженных физических процессоров превышает 8 на сокет, служба ядра СУБД создаст узлы soft-NUMA, которые в идеале содержат 8 ядер, но могут уменьшиться до 5 или до 9 логических процессоров на узел. Размер аппаратного узла может быть ограничен маской сходства ЦП. Количество узлов NUMA не может превышать максимальное количество поддерживаемых узлов NUMA.

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

На рисунке ниже показан тип сведений о soft-NUMA, которые будут отображаться в журнале ошибок SQL Server, когда SQL Server обнаруживает аппаратные узлы NUMA с более чем 8 логическими процессорами и если включен флаг трассировки 8079.

Soft-NUMA

Примечание

Начиная с SQL Server 2016 г., это поведение контролируется подсистемой, и флаг трассировки 8079 не оказывает никакого влияния.

Создание архитектуры Soft-NUMA вручную

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

Совет

Нумерация процессоров начинается с 0.

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

Рассмотрим следующий пример. В этом примере компьютер с восемью процессорами не имеет оборудования NUMA. Настраиваются три узла программной архитектуры NUMA. Экземпляр А компонента Компонент Database Engine настраивается для использования процессоров в количестве от 0 до 3. Второй экземпляр компонента Компонент Database Engine установлен и настроен для использования процессоров с 4 до 7. Визуально пример может быть представлен следующим образом.

CPUs 0 1 2 3 4 5 6 7

Soft-NUMA <-N0--><-N1-><----N2---->

SQL Server <instance A ><instance B>

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

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

Примечание

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

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

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

    ALTER SERVER CONFIGURATION   
    SET PROCESS AFFINITY CPU=0 TO 3;  
    
  2. Выполните следующую инструкцию в экземпляре В, чтобы настроить его для использования процессоров 4, 5, 6 и 7 путем задания маски схожести ЦП.

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

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

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

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

    Пример для сервера SQL Server 2014 с несколькими группами K Тип Имя значения Данные
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node0 DWORD CPUMask 0x3F
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node0 DWORD Группа 0
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node1 DWORD CPUMask 0x0fc0
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node1 DWORD Группа 0
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node2 DWORD CPUMask 0x3f000
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node2 DWORD Группа 0
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node3 DWORD CPUMask 0x3F
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node3 DWORD Группа 1
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node4 DWORD CPUMask 0x0fc0
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node4 DWORD Группа 1
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node5 DWORD CPUMask 0x3f000
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node5 DWORD Группа 1
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node6 DWORD CPUMask 0x3F
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node6 DWORD Группа 2
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node7 DWORD CPUMask 0x0fc0
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node7 DWORD Группа 2
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node8 DWORD CPUMask 0x3f000
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node8 DWORD Группа 2
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node9 DWORD CPUMask 0x3F
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node9 DWORD Группа 3
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node10 DWORD CPUMask 0x0fc0
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node10 DWORD Группа 3
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node11 DWORD CPUMask 0x3f000
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node11 DWORD Группа 3

    Дополнительные примеры

    SQL Server 2014 Тип Имя значения Данные
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node0 DWORD CPUMask 0x03
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node0 DWORD Группа 0
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node1 DWORD CPUMask 0x0c
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node1 DWORD Группа 0
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node2 DWORD CPUMask 0xf0
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\120\NodeConfiguration\Node2 DWORD Группа 0

    Совет

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

    SQL Server 2012 Тип Имя значения Данные
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\110\NodeConfiguration\Node0 DWORD CPUMask 0x03
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\110\NodeConfiguration\Node0 DWORD Группа 0
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\110\NodeConfiguration\Node1 DWORD CPUMask 0x0c
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\110\NodeConfiguration\Node1 DWORD Группа 0
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\110\NodeConfiguration\Node2 DWORD CPUMask 0xf0
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\110\NodeConfiguration\Node2 DWORD Группа 0
    SQL Server 2008 R2 Тип Имя значения Данные
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\NodeConfiguration\Node0 DWORD CPUMask 0x03
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\NodeConfiguration\Node0 DWORD Группа 0
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\NodeConfiguration\Node1 DWORD CPUMask 0x0c
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\NodeConfiguration\Node1 DWORD Группа 0
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\NodeConfiguration\Node2 DWORD CPUMask 0xf0
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\NodeConfiguration\Node2 DWORD Группа 0
    SQL Server 2008 Тип Имя значения Данные
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\NodeConfiguration\Node0 DWORD CPUMask 0x03
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\NodeConfiguration\Node1 DWORD CPUMask 0x0c
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\NodeConfiguration\Node2 DWORD CPUMask 0xf0
    SQL Server 2005 Тип Имя значения Данные
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\90\NodeConfiguration\Node0 DWORD CPUMask 0x03
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\90\NodeConfiguration\Node1 DWORD CPUMask 0x0c
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\90\NodeConfiguration\Node2 DWORD CPUMask 0xf0

См. также:

Сопоставление портов TCP/IP с узлами NUMA (SQL Server)
Параметр конфигурации сервера «affinity mask»
ALTER SERVER CONFIGURATION (Transact-SQL)