Как SQL Server поддерживает архитектуру NUMA

Следующие ключевые изменения, представленные в SQL Server 2005, дают возможность задействовать все преимущества архитектуры неоднородного доступа к памяти (NUMA).

Группирование общих ЦП

SQL Server группирует планировщики для сопоставления с группированием ЦП, основанным на сведениях о границе оборудования NUMA, предоставляемых Windows. Например, 16-процессорный серверный блок может иметь 4 узла NUMA, каждый из которых имеет 4 ЦП. Это позволяет предоставить больше локальной памяти для этой группы планировщиков во время выполнения задач на узле. С SQL Server предоставляется возможность разделения процессоров, связанных с узлом оборудования NUMA, на несколько узлов ЦП. Эта возможность известна как программная архитектура NUMA. Обычно нужно разделить процессоры, чтобы разделить нагрузку между узлами ЦП. Дополнительные сведения о программной архитектуре NUMA см. в разделе Основные сведения о неоднородном доступе к памяти.

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

Каждый узел NUMA (оборудование или программной архитектуры NUMA) имеет соответствующий порт ввода-вывода, который используется в сетевом дескрипторе ввода-вывода. Это помогает распределять обработку сетевых портов ввода-вывода между несколькими портами. При установлении клиентского соединения с SQL Server происходит установление связи с одним из узлов. Все пакетные запросы от этого клиента будут обрабатываться на этом узле.

Каждый раз, при запуске SQL Server в среде NUMA, в журнал ошибок SQL помещаются информационные сообщения, описывающие конфигурацию NUMA.

Как в SQL Server выполняется сопоставление узлов с программной архитектурой NUMA с узлами оборудования NUMA

Узлы с программной архитектурой NUMA определяются один раз для всех экземпляров SQL Server, содержащихся на компьютере, таким образом, все экземпляры компонента Database Engine будут видеть одни и те же узлы с программным NUMA. Затем каждый экземпляр компонента Database Engine использует affinity mask option, чтобы выбрать нужный ЦП. Каждый экземпляр будет использовать любой узел с программной архитектурой NUMA, который связан с выбранным ЦП.

При запуске Windows распределяет память для операционной системы из аппаратного узла «NODE 0». Соответственно узел «NODE 0» будет иметь меньше локальной памяти, доступной для приложений, чем другие узлы. Данная проблема осложняется, если имеется большой системный кэш-файл. Если SQL Server запускается на компьютере с несколькими узлами NUMA, он попытается запуститься на узле NUMA, отличающемся от узла «NODE 0», чтобы его глобальные структуры могли быть размещены в локальной памяти. Для настройки программной архитектуры NUMA см. раздел Как настроить сервер SQL Server на использование программной архитектуры NUMA.

Как назначить соединения для узлов NUMA

Соединения протоколов TCP и VIA могут быть привязаны к одному или нескольким определенным узлам NUMA. Если соединения не привязаны или подключаются через именованные каналы или протокол общей памяти, они распределяются по узлам NUMA по кругу. В пределах узла NUMA соединение выполняется на наименее загруженном планировщике данного узла. Из-за кругового характера назначения новых соединений может быть, что все ЦП узла будут заняты, в то время как другой узел будет свободен. Если количество ЦП очень мало (например 2) и наблюдается большой дисбаланс планирования из-за долго выполняющихся пакетов, например массовой загрузки, возможно, будет получен прирост производительности, если отключить NUMA. Дополнительные сведения см. в разделе Как сопоставить порты TCP/IP порт с узлами NUMA.

Ограничения, налагаемые версиями SQL Server

В SQL Server 2000 вплоть до версии пакета обновления 3 (SP3) не включена специальная поддержка архитектуры NUMA, однако в пакете обновления 4 (SP4) имеется некоторая ограниченная оптимизация NUMA. В SQL Server 2005 включены существенные улучшения, пользователям NUMA настоятельно рекомендуется выполнить обновление до версии SQL Server 2005, чтобы получить полный спектр преимуществ использования архитектуры NUMA.