27.8.26

Soft NUMA, потоки завершения ввода-вывода, рабочие процессы Lazy Writer и узлы памяти - как это работает

Автор: mssql-support, How It Works: Soft NUMA, I/O Completion Thread, Lazy Writer Workers and Memory Nodes

Похоже, существует некоторая семантическая путаница в описании SOFT NUMA в документации Books Online. Область путаницы — это раздел SQL Server 2008 Books Online, показанный ниже.

Soft-NUMA (из документации)

SQL Server позволяет группировать CPU в узлы, называемые soft-NUMA. Обычно вы настраиваете soft-NUMA, когда у вас много CPU и нет аппаратного NUMA, но вы также можете использовать soft-NUMA для разделения аппаратных узлов NUMA на более мелкие группы. Только планировщик SQL Server и сетевой интерфейс SQL Server (SNI) учитывают soft-NUMA. Узлы памяти создаются на основе аппаратного NUMA и поэтому не зависят от soft-NUMA. Так, например, если у вас SMP-компьютер с восемью CPU, и вы создаёте четыре узла soft-NUMA по два CPU в каждом, у вас будет только один узел памяти, обслуживающий все четыре узла NUMA. Soft-NUMA не обеспечивает привязку памяти к CPU.

Преимущества soft-NUMA включают уменьшение узких мест ввода-вывода и Lazy Writer на компьютерах с большим количеством CPU и отсутствием аппаратного NUMA. Существует один поток ввода-вывода и один поток Lazy Writer для каждого узла NUMA. В зависимости от использования базы данных, эти отдельные потоки могут быть существенным узким местом производительности. Настройка четырёх узлов soft-NUMA обеспечивает четыре потока ввода-вывода и четыре потока Lazy Writer, что может повысить производительность.

Вы не можете создать soft-NUMA, который включает CPU из разных аппаратных узлов NUMA. Например, если ваше оборудование имеет восемь CPU (0..7), и у вас два аппаратных узла NUMA (0-3 и 4-7), вы можете создать soft-NUMA, объединив CPU(0,1) и CPU(2,3). Вы не можете создать soft-NUMA, используя CPU(1,5), но вы можете использовать привязку CPU, чтобы привязать экземпляр SQL Server к CPU из разных узлов NUMA. Так, в предыдущем примере, если SQL Server использует CPU 0-3, у вас будет один поток ввода-вывода и один поток Lazy Writer. Если SQL Server использует CPU 1,2,5 и 6, вы будете обращаться к двум узлам NUMA и будете иметь два потока ввода-вывода и два потока Lazy Writer.

Разъяснение путаницы

Путаница сосредоточена на использовании термина «узел памяти» в несколько обобщённом смысле и объединении общего комментария о вводе-выводе с некоторыми поведениями бета/CTP-версий. Вместо этого этот раздел должен чётко заявить, что пул буферов делает с памятью и что SQL OS считает узлом памяти для отслеживания.

Узел памяти SQL OS выровнен по каждому физическому узлу NUMA, представленному в системе. Это не зависит от использования SOFT NUMA. Как указано в документации, конфигурация Soft NUMA не может пересекать границы физического NUMA (узла памяти SQL OS). Soft NUMA позволяет разделить физический узел на логические узлы, но не позволяет объединять физические узлы в логический узел.

В некоторых бета/CTP-сборках включение Soft NUMA заставляло пул буферов обрабатывать всю память как плоскую модель памяти (один узел). Вместо отслеживания и обработки информации по физическим узлам, пул буферов обрабатывал всю память так, как если бы существовал только один физический узел. Теперь единственный способ сказать пулу буферов обрабатывать всю память как один узел (плоский доступ) — это включить флаг трассировки 839 или 8015.

Комментарий о вводе-выводе

Комментарий о вводе-выводе напрямую относится к порту завершения ввода-вывода и потоку, который создаётся для каждого логического узла. Таким образом, вы можете настроить soft NUMA для поддержки расширенных привязок TCP/IP, и каждый логический узел получает определённый порт завершения ввода-вывода и управляющий поток. Логические узлы НЕ получают дополнительный поток Lazy Writer, а физические узлы — получают.

ПРИМЕЧАНИЕ: Потоки завершения ввода-вывода в SQL Server 2005 и 2008 предназначены для обработки запросов на подключение и трафика TDS. Они НЕ обрабатывают операции ввода-вывода с файлами данных и журналов базы данных.

Создание потоков Lazy Writer

Создание потоков Lazy Writer привязано к представлению SQL OS о физических узлах памяти NUMA. Таким образом, сколько аппаратных узлов NUMA представлено, столько потоков Lazy Writer и будет создано. Флаг трассировки 8015 указывает SQL OS игнорировать обнаружение физического NUMA. Как и с любым флагом трассировки, его следует использовать с осторожностью, поскольку этот флаг возвращает поведение к логическому состоянию до SQL 2005 и не рекомендуется для использования в производственной среде.

Ожидаемое поведение SQL Server 2008

В следующей таблице описано ожидаемое поведение SQL Server 2008. Поведение может немного отличаться в установках SQL Server 2005.

Физические узлы Логические узлы (SOFT NUMA) Узлы памяти пула буферов Узлы памяти SQL OS Рабочие процессы Lazy Writer Потоки завершения ввода-вывода
1 Не включено 1 1 1 1
2 Не включено 2 2 2 2
1 2 1 1 1 2
2 4 2 2 2 4
4 2 (Неверно — игнорируется) 4 4 4 4
Включён флаг трассировки 8015
1

Комментариев нет:

Отправить комментарий