Параметр affinity mask

Изменения: 5 декабря 2005 г.

Для реализации многозадачности операционные системы Microsoft Windows 2000 и Windows Server 2003 иногда перемещают потоки между разными процессорами. Хотя с точки зрения операционной системы эти действия эффективны, они могут снизить производительность Microsoft SQL Server при больших системных нагрузках, так как данные кэша каждого процессора будут постоянно обновляться. В этих условиях назначение процессорам определенных потоков может повысить производительность, устраняя повторную загрузку процессоров и уменьшая количество переносов потоков между процессорами (а значит, уменьшая число контекстных переключений). Такая связь между потоком и процессором называется соответствием процессоров.

SQL Server 2005 поддерживает соответствие процессоров с помощью двух параметров affinity mask: affinity mask (или CPU affinity mask) и affinity I/O mask. Дополнительные сведения о параметре affinity I/O mask см. в разделе Параметр affinity I/O mask. Поддержка соответствия процессоров и ввода-вывода для серверов с числом процессоров от 33 до 64 требует также использования параметров Параметр affinity64 mask и Параметр affinity64 I/O mask соответственно.

ms187104.note(ru-ru,SQL.90).gifПримечание.
Поддержка соответствия процессоров для серверов с числом процессоров от 33 до 64 доступна только в 64-разрядных версиях операционных систем.

Параметр affinity mask, существовавший и в более ранних выпусках SQL Server, контролирует соответствие процессоров динамически.

В Microsoft SQL Server 2005 параметр affinity mask может быть изменен без перезапуска экземпляра SQL Server. При использовании хранимой процедуры sp_configure нужно выполнить инструкцию RECONFIGURE или RECONFIGURE WITH OVERRIDE после изменения значения этого параметра. При работе в SQL Server Express изменение affinity mask не требует перезапуска.

Изменения масок схожести происходят динамически, что дает пользователям возможность запускать планировщики процессоров, связывающие процессы в SQL Server и завершать их работу по требованию. Это может происходить при изменении условий работы сервера. Например, если на сервере добавлен новый экземпляр SQL Server, то может понадобиться внести изменения в параметр affinity mask, чтобы перераспределить нагрузку на процессор.

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

Чтобы запустить новый планировщик процессора, SQL Server создает новый планировщик и добавляет его в список стандартных планировщиков. Новый планировщик используется только для обработки новых входящих пакетов. Текущие пакеты обрабатываются старым планировщиком. Рабочие потоки переходят на новый планировщик по мере освобождения или по мере создания новых рабочих потоков.

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

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

Маска привязки ввода-вывода напрямую влияет на задачи привязки ввода-вывода (например, на lazywriter и logwriter). Если задачи lazywriter и logwriter не приведены в соответствие с процессорами, они следуют общим правилам постоянных задач, например, lockmonitor или checkpoint.

Чтобы гарантировать, что новая маска схожести допустима, команда RECONFIGURE проверяет, чтобы нормальные соответствия процессоров и ввода-вывода были взаимно исключающими. Если это не так, то сообщение об ошибке будет отправлено в сеанс клиента и записано в журнал ошибок SQL Server, сигнализируя о том, что такая настройка не рекомендуется. Запуск с параметром RECONFIGURE WITH OVERRIDE позволяет соответствиям процессоров и ввода-вывода не быть взаимоисключающими.

Если указать маску схожести, которая попытается сопоставить поток несуществующему процессору, то команда RECONFIGURE отправит сообщение об ошибке в сеанс клиента и в журнал ошибок SQL Server. Использование параметра RECONFIGURE WITH OVERRIDE в этом случае ничего не изменит, и будет создано еще одно сообщение об ошибке.

Можно также исключить работу SQL Server на процессорах, получивших специальные рабочие нагрузки от операционной системы Windows 2000 или Windows Server 2003. Если установить значение бита, представляющего процессор, в 1, этот процессор будет выбран ядром СУБД SQL Server для назначения потоков. Если значением affinity mask будет 0 (по умолчанию), алгоритмы планирования Microsoft Windows 2000 или Windows Server 2003 самостоятельно определят соответствие потока. Если значением affinity mask будет любое ненулевое значение, SQL Server интерпретирует это значение соответствия как битовую маску, определяющую процессоры, годные для выбора.

При запрещении потокам SQL Server выполняться на определенных процессорах Microsoft Windows 2000 или Windows Server 2003 могут лучше обрабатывать процессы, характерные для Windows. Например, на 8-процессорном сервере с двумя запущенными экземплярами SQL Server (А и Б) системный администратор мог бы использовать параметр affinity mask и назначить первые 4 процессора экземпляру А, а вторые 4 — экземпляру Б. Чтобы конфигурировать работу более 32 процессоров, нужно указать и параметр affinity mask и параметр affinity64 mask. Параметр affinity mask может принимать значения, перечисленные ниже.

  • Однобайтовое значение affinity mask обеспечивает управление компьютерами, содержащими до 8 процессоров.
  • Двухбайтовое значение affinity mask обеспечивает управление компьютерами, содержащими до 16 процессоров.
  • Трехбайтовое значение affinity mask обеспечивает управление компьютерами, содержащими до 24 процессоров.
  • Четырехбайтовое значение affinity mask обеспечивает управление компьютерами, содержащими до 32 процессоров.
  • Для управления большим числом процессоров для первых 32 процессоров используется четырехбайтовая маска соответствия, а для оставшихся — четырехбайтовое значение параметра affinity64 mask.

Так как задание соответствия процессоров SQL Server — специализированная операция, выполнять ее рекомендуется только при необходимости. В большинстве случаев соответствие по умолчанию, назначаемое Microsoft Windows 2000 или Windows Server 2003, гарантирует оптимальную производительность. При задании масок соответствия следует также учитывать требования к ЦП других приложений. Дополнительные сведения см. в документации по операционной системе Windows.

ms187104.note(ru-ru,SQL.90).gifПримечание.
Для просмотра и анализа нагрузки на отдельные процессоры можно использовать системный монитор Windows.

При задании параметра affinity mask необходимо также определять параметр конфигурации affinity I/O mask. Не допускайте, чтобы один и тот же процессор оказывался задействованным и в маске affinity mask, и в маске affinity I/O mask. Биты, соответствующие каждому процессору, должны находится в одном из трех состояний:

  • значение 0 для обоих параметров, affinity mask и affinity I/O mask;
  • значение 1 для параметра affinity mask и 0 для параметра affinity I/O mask;
  • значение 0 для параметра affinity mask и 1 для параметра affinity I/O mask.
ms187104.Caution(ru-ru,SQL.90).gifВнимание!
Не используйте маску схожести процессоров в операционной системе Windows и маску схожести в SQL Server одновременно. Эти настройки предназначены для достижения одного результата, и если их значения будут несогласованными, результат может быть непредсказуем. Соответствие процессоров в SQL Server лучше всего задать с помощью параметра процедуры sp_configure.

Пример

Для примера задания значения параметру affinity mask пусть процессоры 1, 2 и 5 будут выбраны как доступные, значит, значениями этих битов будут 1, а значениями битов 0, 3, 4, 6 и 7 — 0; это соответствует шестнадцатеричному значению 0x26 и десятеричному 38. Биты нумеруются справа налево. Параметр affinity mask отсчитывает процессоры от 0 до 31, так что в этом примере счетчик 1 представляет второй процессор на сервере.

sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
sp_configure 'affinity mask', 38;
RECONFIGURE;
GO

Далее приведены значения параметра affinity mask для 8-процессорной системы.

Десятичное значение Битовая маска Количество допустимых потоков SQL Server на процессорах

1

00000001

0

3

00000011

0 и 1

7

00000111

0, 1 и 2

15

00001111

0, 1, 2 и 3

31

00011111

0, 1, 2, 3 и 4

63

00111111

0, 1, 2, 3, 4 и 5

127

01111111

0, 1, 2, 3, 4, 5 и 6

255

11111111

0, 1, 2, 3, 4, 5, 6 и 7

Параметр affinity mask является дополнительным. Если для изменения параметра affinity mask используется системная хранимая процедура sp_configure, изменить его можно, только если значением параметра show advanced options является 1. После выполнения команды языка Transact-SQL RECONFIGURE изменения вступают в силу немедленно, не требуя перезапуска экземпляра SQL Server.

Доступ к неоднородной памяти (NUMA)

При использовании аппаратного доступа к неоднородной памяти (NUMA), если установлена маска схожести, каждый планировщик в узле сопоставляется своему собственному ЦП. Когда маска схожести не установлена, каждый планировщик соответствует группе процессоров в пределах узла NUMA, и планировщик, сопоставленный с узлом NUMA N1, может планировать работу на любом процессоре в узле, но не на процессорах, связанных с другим узлом.

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

Вопросы лицензирования

Динамическое изменение соответствия жестко ограничивается лицензированием по процессорам. SQL Server не позволяет использовать affinity mask, нарушающие политику лицензирования.

Запуск

Если заданная маска схожести нарушает политику лицензирования во время запуска SQL Server или во время подсоединения базы данных, ядро СУБД завершит процесс запуска или операцию подсоединения или восстановления базы данных, а затем сбросит текущее значение маски в sp_configure в 0, записав сообщение об ошибке в журнал ошибок SQL Server.

Повторная настройка

Если заданная маска схожести нарушает политику лицензирования во время выполнения команды языка Transact-SQL RECONFIGURE, сообщение об ошибке с требованием изменить маску отправляется в сеанс клиента и в журнал ошибок SQL Server. В этом случае команда RECONFIGURE WITH OVERRIDE принята не будет.

См. также

Основные понятия

Установка параметров конфигурации сервера

Другие ресурсы

Мониторинг использования ресурсов (системный монитор)
RECONFIGURE (Transact-SQL)
Хранимая процедура sp_configure (Transact-SQL)

Справка и поддержка

Получение помощи по SQL Server 2005

Журнал изменений

Версия Журнал

5 декабря 2005 г.

Новое содержимое:
  • Добавлен раздел по NUMA.