• Базы данных
  • SQL Server
  • Поддержка и разрешение проблем процессорной архитектуры NUMA в SQL Server 2005

Поддержка и разрешение проблем процессорной архитектуры NUMA в SQL Server 2005 - Поддержка NUMA в SQL Server 2005

ОГЛАВЛЕНИЕ

 

Поддержка NUMA в SQL Server 2005

SQL Server 2005 пытается получить максимальные преимущества от архитектуры NUMA, что позволяет усилить производительность SQLOS для больших объёмов информации. В процессе запуска, SQL Server подстраивается под установленную операционную систему и аппаратную конфигурацию. Он организует свою среду так, чтобы задействовать по максимуму возможности имеющихся аппаратных средств, для этого на программном уровне SQL Server создаёт некую абстракцию каждого узла NUMA и его памяти, которую в этой статье давайте просто называть "Узел".

Каждый такой узел в SQL Server имеет менеджера памяти, устанавливающего планировщиков для каждого представленного битовой маской конфигурации сервера процессора, а также устанавливающего порты ввода - вывода и другие компоненты. Этот узел можно абстрагировать как отдельный экземпляр SQL Server с собственным портом I/O, который он слушает. Клиенты или отдельные приложения могут быть настроены на то, чтобы подключаться только к определенному узлу. Узел может быть доступен из сети или работать автономно, не выполняя работы или не обслуживая подключений. Состояние узла можно менять на лету, настраивая его привязку - affinity. Подключения могут осуществляться к выбранному узлу или группе узлов, сетевой порт может привязываться к нескольким узлам. Без дополнительных настроек, каждое новое подключение будет назначено на следующий по порядку узел в задействованной группе узлов. Если подключение работает с группой узлов, оно также назначается следующему узлу по порядку и в зцикле очерёдности в этой группе узлов. В BOL имеется множество информации о настройке подключений для портов SQL Server, узлов и клиентских компьютеров. После создания подключения, оно привязывается к узлу до момента прекращения соединения. Если узел подключения переведён в автономное состояние, его задачи будут запланированы для других узлов. Вся память, которая использовалась для обслуживания выполняемых в подключении работ, распределяется в локальной (ближней) по отношении к задействованному узлу памяти. Страницы базы данных всегда распределяются в ближней памяти узла, который с ними работает, если они не были привнесены в память подключением, назначенным на другой узел.

Пожалуйста, имейте в виду, что июльский SQL Server CTP ещё не умеет распределять память от других узлов. При попытке такого распределения возможны ошибки недостаточности памяти или запросы могут исполняться существенно дольше положенного.

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

Ниже представлены два параметра настроек, которые меняют поведение SQL Server, работающего на платформе с NUMA архитектурой:

  1. Affinity - Используя sp_configure DBA может легко изменить для SQL Server привязку процессоров. Основное отличие между SQL Server 2000 и SQL Server 2005 для этого параметра состоит в том, что теперь изменения affinity становятся действительными сразу и не требуют рестарта сервера. Как Вы помните по SQL Server 2000, если affinity не задано, SQL Server будет привязывается сразу ко всем процессорам. Для SQL Server 2005, работающего на платформе с NUMA архитектурой, если affinity не задано, SQL Server будет увязывать каждый планировщик с набором процессоров, в соответствии со схемой отображения узлов для SQL Server. Например, для NUMA узла 1 (узлы пронумерованы, начиная с 0), имеющего 4 процессора, планировщики SQL Server этого узла будут иметь affinity равное 0xF0. В действительности, когда DBA задаёт affinity, мы называем это аппаратным affinity, каждому планировщику узла будет привязан его собственный процессор. Например, в упомянутом выше примере первый планировщик будет иметь affinity равное 0x10. Когда планировщик узла отображается на основной процессор, мы говорим, что планировщик является активным. Для планировщика также возможно быть и в автономном режиме. Для примера, давайте рассмотрим случай, когда в системе два NUMA узла; DBA устанавливает для сервера affinity равным 0x1F - только 5 планировщиков отображены на процессоры; четыре для узла 0 и один для узла 1. Последние три планировщика узла 1 в автономном состоянии - т.е. никакие новые задачи ими не будут планироваться. Если все планировщики для какого - нибудь узла будут автономны, тогда весь узел будет автономен - это означает что ему не будет предоставляться какая - нибудь работа или новые подключения.
  2. Max Server Memory - Это один из глобальных параметров настройки сервера. В июльской версии SQL Server 2005 CTP, память по-прежнему распределяется для узла до тех пор, пока узел в ней нуждается или пока объём распределяемой памяти не превысит заданный в max server memory объём. SQL Server не может пока распределять/использовать дальнюю по отношению к узлу память, эта проблема должна быть решена к появлению окончательной редакции SQL Server 2005.