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


Свойства пула потоков

Применимо к: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

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

Каждый экземпляр поддерживает собственный набор пулов потоков. Есть различия в том, как табличные и многомерные экземпляры используют пулы потоков. Например, пул потоков IOProcess используют только многомерные экземпляры. Таким образом, свойство PerNumaNode , описанное в этой статье, не имеет смысла для табличных экземпляров. В разделе Справочник по свойствам ниже приведены требования к режиму для каждого свойства.

Примечание

Табличное развертывание в системах NUMA в данном разделе не освещается. Табличные решения можно успешно развертывать в системах NUMA, но производительность хранимых в памяти баз данных, используемых в табличных моделях, может быть ограничена на сильно масштабируемых архитектурах. Дополнительные сведения см. в статьях Практический пример использования служб Analysis Services. Использование табличных моделей в крупномасштабных коммерческих решениях и Подбор оборудования для табличного решения.

Управление потоками

SQL Server Analysis Services использует многопоточность для использования доступных ресурсов ЦП за счет увеличения числа задач, выполняемых параллельно. Подсистема хранилища является многопоточной. Примеры многопоточных заданий, выполняемых в подсистеме хранилища: параллельная обработка объектов или обработка отдельных запросов, которые передаются в подсистему хранилища, а также возврат запрошенных данных. Модуль формул из-за особенностей последовательных вычислений выполняется в одном потоке. Каждый запрос в основном выполняется в одном потоке, который запрашивает и ожидает данные от подсистемы хранилища. Потоки выполнения запроса выполняются дольше и завершаются только после выполнения всего запроса.

По умолчанию SQL Server Analysis Services будут использовать все доступные логические процессоры. При запуске процесс msmdsrv.exe будет назначен определенной группе процессоров, но со временем потоки могут быть назначены на любой логический процессор, в любой группе.

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

Можно задать сходство между типами операций и определенным набором логических процессоров. Свойство GroupAffinity позволяет создавать настраиваемые маски сходства, указывающие, какой системный ресурс следует использовать для каждого типа пула потоков, управляемых SQL Server Analysis Services.

GroupAffinity — это свойство, которое можно задать в любом из пулов потоков, используемых для различных рабочих нагрузок:

  • ThreadPool \ Parsing \ Short — это пул синтаксического анализа для коротких запросов. Запросы, которые умещаются в одном сетевом сообщении, считаются короткими.

  • ThreadPool \ Parsing \ Long — это пул синтаксического анализа для всех других запросов, которые не помещаются в одно сетевое сообщение.

    Примечание

    Поток из любого пула синтаксического анализа можно использовать для выполнения запроса. Запросы, которые могут быть выполнены быстро, такие как запросы Discover или Cancel, иногда выполняются сразу же, а не ставятся в очередь запросов пула потоков.

  • ThreadPool \ Query — это пул потоков, который выполняет все запросы, не обрабатываемые пулом потоков синтаксического анализа. Потоки в этом пуле выполняют операции всех типов, например команды поиска, MDX, DAX, DMX и DDL. A

  • ThreadPool \ IOProcess используется для заданий ввода-вывода, связанных с запросами в многомерном модуле подсистемы хранилища. Ожидается, что задания, выполняемые этими потоками, не имеют зависимостей от других потоков. Эти потоки обычно просматривают один сегмент секции и выполняют фильтрацию и статистическую обработку данных сегмента. ПотокиIOProcess особенно чувствительны к параметрам конфигурации оборудования NUMA. Этот пул потоков имеет свойство конфигурации PerNumaNode , которое при необходимости может использоваться для настройки производительности.

  • ThreadPool \ Process предназначен для более продолжительных заданий подсистемы хранилища, включая операции агрегирования, индексирования и фиксации. Режим хранилища ROLAP также использует потоки из пула потоков Processing.

  • VertiPaq \ ThreadPool — это пул потоков для сканирования таблиц в табличной модели.

Для запросов на обслуживание SQL Server Analysis Services может превысить максимальное ограничение пула потоков, запрашивая дополнительные потоки, если они необходимы для выполнения работы. Однако если поток завершает выполнение своей задачи, притом что текущее количество потоков превышает максимальный предел, то поток просто завершается, а не возвращается в пул потоков.

Примечание

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

По умолчанию размер пула потоков определяется SQL Server Analysis Services и зависит от количества ядер. Для SSAS можно просмотреть выбранные значения по умолчанию, проверив файл msmdsrv.log после запуска сервера. В ходе настройки производительности можно увеличить размер пула потоков, а также другие свойства, чтобы повысить производительность запросов и обработки.

Справочник по свойствам пула потоков

В этом разделе описываются свойства пула потоков в файле msmdsrv.ini каждого экземпляра SQL Server Analysis Services. Подмножество этих свойств также доступно в SQL Server Management Studio.

Свойства перечисляются в алфавитном порядке.

Имя Тип Описание Значение по умолчанию Руководство
IOProcess \ Параллелизма double Значение с плавающей запятой двойной точности, определяющее алгоритм для установки целевого количества потоков, которые могут быть одновременно поставлены в очередь. 2,0 Дополнительное свойство, которое следует изменять только под руководством службы поддержки Майкрософт.

Параллелизм используется для инициализации пулов потоков, которые в Windows реализуются с помощью портов завершения операций ввода-вывода.
IOProcess \ GroupAffinity строка Массив шестнадцатеричных значений, который соответствует группам процессоров в системе, используемой для задания сходства потоков в пуле потоков IOProcess логическим процессорам в каждой группе процессоров. нет С помощью этого свойства можно создавать пользовательские сходства. По умолчанию это свойство пусто.

См. подробности в разделе Задание параметра GroupAffinity для привязки потоков к процессорам или группе процессоров .

Применяется только к многомерным моделям.
IOProcess \ MaxThreads INT 32-разрядное целое число со знаком, определяющее максимальное количество потоков для включения в пул потоков. 0 0 указывает, что сервер сам определяет значения по умолчанию. По умолчанию сервер устанавливает это значение как 64 или как умноженное на 10 число логических процессоров в зависимости от того, какое из чисел выше. Например, в системе с 4 ядрами с технологией Hyper-Threading максимум пула потоков будет равен 80.

Если значение задано как отрицательное, сервер умножит это число на количество логических процессоров. Например, если значение равно -10, на сервере с 32 логическими процессорами максимум будет составлять 320 потоков.

Максимальное значение зависит от числа процессоров, доступных для пользовательских масок сходства, определенных вами ранее. Например, если уже была задана схожесть пула потоков на использование 8 из 32 процессоров, при задании свойству MaxThreads значения -10 верхняя граница пула потоков будет равна 10*8, то есть 80 потокам.

Фактические значения для этого свойства пула потоков заносятся в файл журнала msmdsrv после запуска службы.

Дополнительные сведения о настройке параметров пула потоков можно найти в руководстве по операциям служб Analysis Services.

Применяется только к многомерным моделям.
IOProcess \ MinThreads INT 32-разрядное целое число со знаком, определяющее минимальное количество потоков, предварительно выделяемых для пула потоков. 0 0 указывает, что сервер сам определяет значения по умолчанию. Минимальное значение по умолчанию равно 1.

Если значение задано как отрицательное, сервер умножит это число на количество логических процессоров.

Фактические значения для этого свойства пула потоков заносятся в файл журнала msmdsrv после запуска службы.

Дополнительные сведения о настройке параметров пула потоков можно найти в руководстве по операциям служб Analysis Services.

Применяется только к многомерным моделям.
IoProcess \ PerNumaNode INT 32-разрядное целое число со знаком, определяющее количество пулов потоков, создаваемых для процесса msmdsrv. -1 Допустимые значения: -1, 0, 1, 2.

-1 = сервер выбирает другую стратегию пула потоков ввода-вывода на основе числа узлов NUMA. В системах, где число узлов NUMA меньше 4, поведение сервера такое же, как и для значения 0 (для системы создается один пул потоков IOProcess). В системах, где количество узлов составляет четыре или больше, поведение такое же, как и для значения 1 (для каждого узла создаются пулы потоков IOProcess).

0 = отключает пулы потоков для каждого узла NUMA, так что присутствует только один пул потоков IOProcess, используемый msmdsrv.exe.

1 = включает один пул потоков IOProcess на каждый узел NUMA.

2 = один пул потоков IOProcess на каждый логический процессор. Потоки в каждом пуле привязываются к узлу NUMA логического процессора, при этом идеальный процессор указывает на логический процессор.

См. подробности в разделе Задайте параметр PerNumaNode, чтобы привязать потоки ввода-вывода к процессорам в узле NUMA. .

Применяется только к многомерным моделям.
IoProcess \ PriorityRatio INT 32-разрядное целое число со знаком, которое используется в том случае, если требуется, чтобы иногда выполнялись потоки с более низким приоритетом, даже если очередь с более высоким приоритетом не пуста. 2 Дополнительное свойство, которое следует изменять только под руководством службы поддержки Майкрософт.

Применяется только к многомерным моделям.
IoProcess \ StackSizeKB INT 32-разрядное целое число со знаком, которое можно использовать для настройки выделения памяти во время выполнения потоков. 0 Дополнительное свойство, которое следует изменять только под руководством службы поддержки Майкрософт.

Применяется только к многомерным моделям.
Анализа \ Длинные \ Параллелизма double Значение с плавающей запятой двойной точности, определяющее алгоритм для установки целевого количества потоков, которые могут быть одновременно поставлены в очередь. 2,0 Дополнительное свойство, которое следует изменять только под руководством службы поддержки Майкрософт.

Параллелизм используется для инициализации пулов потоков, которые в Windows реализуются с помощью портов завершения операций ввода-вывода.
Анализа \ Длинные \ GroupAffinity строка Массив шестнадцатеричных значений, который соответствует группам процессоров в системе, используемой для задания сходства потоков анализа логическим процессорам в каждой группе процессоров. нет С помощью этого свойства можно создавать пользовательские сходства. По умолчанию это свойство пусто.

См. подробности в разделе Задание параметра GroupAffinity для привязки потоков к процессорам или группе процессоров .
Анализа \ Длинные \ NumThreads INT Свойство с 32-разрядным целочисленным значением со знаком, определяющее количество потоков, которое можно создать для длинных команд. 0 0 указывает, что сервер сам определяет значения по умолчанию. По умолчанию параметру NumThreads задается абсолютное значение 4 или умноженное на 2 число логических процессоров в зависимости от того, какое значение выше.

Если значение задано как отрицательное, сервер умножит это число на количество логических процессоров. Например, если значение равно -10, на сервере с 32 логическими процессорами максимум будет составлять 320 потоков.

Максимальное значение зависит от числа процессоров, доступных для пользовательских масок сходства, определенных вами ранее. Например, если уже была задана схожесть пула потоков на использование 8 из 32 процессоров, при задании свойству NumThreads значения -10 верхняя граница пула потоков будет равна 10*8, то есть 80 потокам.

Фактические значения для этого свойства пула потоков заносятся в файл журнала msmdsrv после запуска службы.
Анализа \ Длинные \ PriorityRatio INT 32-разрядное целое число со знаком, которое используется в том случае, если требуется, чтобы иногда выполнялись потоки с более низким приоритетом, даже если очередь с более высоким приоритетом не пуста. 0 Дополнительное свойство, которое следует изменять только под руководством службы поддержки Майкрософт.
Анализа \ Длинные \ StackSizeKB INT 32-разрядное целое число со знаком, которое можно использовать для настройки выделения памяти во время выполнения потоков. 0 Дополнительное свойство, которое следует изменять только под руководством службы поддержки Майкрософт.
Анализа \ Короткие \ Параллелизма double Значение с плавающей запятой двойной точности, определяющее алгоритм для установки целевого количества потоков, которые могут быть одновременно поставлены в очередь. 2,0 Дополнительное свойство, которое следует изменять только под руководством службы поддержки Майкрософт.

Параллелизм используется для инициализации пулов потоков, которые в Windows реализуются с помощью портов завершения операций ввода-вывода.
Анализа \ Короткие \ GroupAffinity строка Массив шестнадцатеричных значений, который соответствует группам процессоров в системе, используемой для задания сходства потоков анализа логическим процессорам в каждой группе процессоров. нет С помощью этого свойства можно создавать пользовательские сходства. По умолчанию это свойство пусто.

См. подробности в разделе Задание параметра GroupAffinity для привязки потоков к процессорам или группе процессоров .
Анализа \ Короткие \ NumThreads INT Свойство с 32-разрядным целочисленным значением со знаком, определяющее количество потоков, которое можно создать для коротких команд. 0 0 указывает, что сервер сам определяет значения по умолчанию. По умолчанию параметру NumThreads задается абсолютное значение 4 или умноженное на 2 число логических процессоров в зависимости от того, какое значение выше.

Если значение задано как отрицательное, сервер умножит это число на количество логических процессоров. Например, если значение равно -10, на сервере с 32 логическими процессорами максимум будет составлять 320 потоков.

Максимальное значение зависит от числа процессоров, доступных для пользовательских масок сходства, определенных вами ранее. Например, если уже была задана схожесть пула потоков на использование 8 из 32 процессоров, при задании свойству NumThreads значения -10 верхняя граница пула потоков будет равна 10*8, то есть 80 потокам.

Фактические значения для этого свойства пула потоков заносятся в файл журнала msmdsrv после запуска службы.
Анализа \ Короткие \ PriorityRatio INT 32-разрядное целое число со знаком, которое используется в том случае, если требуется, чтобы иногда выполнялись потоки с более низким приоритетом, даже если очередь с более высоким приоритетом не пуста. 0 Дополнительное свойство, которое следует изменять только под руководством службы поддержки Майкрософт.
Анализа \ Короткие \ StackSizeKB INT 32-разрядное целое число со знаком, которое можно использовать для настройки выделения памяти во время выполнения потоков. 64 * число логических процессоров Дополнительное свойство, которое следует изменять только под руководством службы поддержки Майкрософт.
Процесс \ Параллелизма double Значение с плавающей запятой двойной точности, определяющее алгоритм для установки целевого количества потоков, которые могут быть одновременно поставлены в очередь. 2,0 Дополнительное свойство, которое следует изменять только под руководством службы поддержки Майкрософт.

Параллелизм используется для инициализации пулов потоков, которые в Windows реализуются с помощью портов завершения операций ввода-вывода.
Процесс \ GroupAffinity строка Массив шестнадцатеричных значений, который соответствует группам процессоров в системе, используемой для задания сходства потоков обработки логическим процессорам в каждой группе процессоров. нет С помощью этого свойства можно создавать пользовательские сходства. По умолчанию это свойство пусто.

См. подробности в разделе Задание параметра GroupAffinity для привязки потоков к процессорам или группе процессоров .
Процесс \ MaxThreads INT 32-разрядное целое число со знаком, определяющее максимальное количество потоков для включения в пул потоков. 0 0 указывает, что сервер сам определяет значения по умолчанию. По умолчанию сервер задает этому свойству абсолютное значение 64 или значение, равное числу логических процессоров, в зависимости от того, какое выше. Например, в системе с 64 ядрами и с включенной функцией технологии Hyper-Threading (что в результате дает 128 логических процессора), максимум для пула потоков будет равен 128.

Если значение задано как отрицательное, сервер умножит это число на количество логических процессоров. Например, если значение равно -10, на сервере с 32 логическими процессорами максимум будет составлять 320 потоков.

Максимальное значение зависит от числа процессоров, доступных для пользовательских масок сходства, определенных вами ранее. Например, если уже была задана схожесть пула потоков на использование 8 из 32 процессоров, при задании свойству MaxThreads значения -10 верхняя граница пула потоков будет равна 10*8, то есть 80 потокам.

Фактические значения для этого свойства пула потоков заносятся в файл журнала msmdsrv после запуска службы.

Дополнительные сведения о настройке параметров пула потоков можно найти в руководстве по операциям служб Analysis Services.
Процесс \ MinThreads INT 32-разрядное целое число со знаком, определяющее минимальное количество потоков, предварительно выделяемых для пула потоков. 0 0 указывает, что сервер сам определяет значения по умолчанию. Минимальное значение по умолчанию равно 1.

Если значение задано как отрицательное, сервер умножит это число на количество логических процессоров.

Фактические значения для этого свойства пула потоков заносятся в файл журнала msmdsrv после запуска службы.

Дополнительные сведения о настройке параметров пула потоков можно найти в руководстве по операциям служб Analysis Services.
Процесс \ PriorityRatio INT 32-разрядное целое число со знаком, которое используется в том случае, если требуется, чтобы иногда выполнялись потоки с более низким приоритетом, даже если очередь с более высоким приоритетом не пуста. 2 Дополнительное свойство, которое следует изменять только под руководством службы поддержки Майкрософт.
Процесс \ StackSizeKB INT 32-разрядное целое число со знаком, которое можно использовать для настройки выделения памяти во время выполнения потоков. 0 Дополнительное свойство, которое следует изменять только под руководством службы поддержки Майкрософт.
Запроса \ Параллелизма double Значение с плавающей запятой двойной точности, определяющее алгоритм для установки целевого количества потоков, которые могут быть одновременно поставлены в очередь. 2,0 Дополнительное свойство, которое следует изменять только под руководством службы поддержки Майкрософт.

Параллелизм используется для инициализации пулов потоков, которые в Windows реализуются с помощью портов завершения операций ввода-вывода.
Запроса \ GroupAffinity строка Массив шестнадцатеричных значений, который соответствует группам процессоров в системе, используемой для задания сходства потоков обработки логическим процессорам в каждой группе процессоров. нет С помощью этого свойства можно создавать пользовательские сходства. По умолчанию это свойство пусто.

См. подробности в разделе Задание параметра GroupAffinity для привязки потоков к процессорам или группе процессоров .
Запроса \ MaxThreads INT 32-разрядное целое число со знаком, определяющее максимальное количество потоков для включения в пул потоков. 0 0 указывает, что сервер сам определяет значения по умолчанию. По умолчанию сервер задает этому свойству абсолютное значение 10 или значение, равное числу логических процессоров умноженное на 2, в зависимости от того, какое из них выше. Например, в системе с 4 ядрами с технологией Hyper-Threading максимальное число потоков равно 16.

Если значение задано как отрицательное, сервер умножит это число на количество логических процессоров. Например, если значение равно -10, на сервере с 32 логическими процессорами максимум будет составлять 320 потоков.

Максимальное значение зависит от числа процессоров, доступных для пользовательских масок сходства, определенных вами ранее. Например, если уже была задана схожесть пула потоков на использование 8 из 32 процессоров, при задании свойству MaxThreads значения -10 верхняя граница пула потоков будет равна 10*8, то есть 80 потокам.

Фактические значения для этого свойства пула потоков заносятся в файл журнала msmdsrv после запуска службы.

Дополнительные сведения о настройке параметров пула потоков можно найти в руководстве по операциям служб Analysis Services.
Запроса \ MinThreads INT 32-разрядное целое число со знаком, определяющее минимальное количество потоков, предварительно выделяемых для пула потоков. 0 0 указывает, что сервер сам определяет значения по умолчанию. Минимальное значение по умолчанию равно 1.

Если значение задано как отрицательное, сервер умножит это число на количество логических процессоров.

Фактические значения для этого свойства пула потоков заносятся в файл журнала msmdsrv после запуска службы.

Дополнительные сведения о настройке параметров пула потоков можно найти в руководстве по операциям служб Analysis Services.
Запроса \ PriorityRatio INT 32-разрядное целое число со знаком, которое используется в том случае, если требуется, чтобы иногда выполнялись потоки с более низким приоритетом, даже если очередь с более высоким приоритетом не пуста. 2 Дополнительное свойство, которое следует изменять только под руководством службы поддержки Майкрософт.
Запроса \ StackSizeKB INT 32-разрядное целое число со знаком, которое можно использовать для настройки выделения памяти во время выполнения потоков. 0 Дополнительное свойство, которое следует изменять только под руководством службы поддержки Майкрософт.
VertiPaq \ Процессоров INT 32-разрядное целое число со знаком, определяющее максимальное количество процессоров для использования в табличных запросах. 0 0 указывает, что сервер сам определяет значения по умолчанию. По умолчанию сервер задает этому свойству абсолютное значение 10 или значение, равное числу логических процессоров умноженное на 2, в зависимости от того, какое из них выше. Например, в системе с 4 ядрами с технологией Hyper-Threading максимальное число потоков равно 16.

Если значение задано как отрицательное, сервер умножит это число на количество логических процессоров. Например, если значение равно -10, на сервере с 32 логическими процессорами максимум будет составлять 320 потоков.

Максимальное значение зависит от числа процессоров, доступных для пользовательских масок сходства, определенных вами ранее. Например, если уже была задана схожесть пула потоков на использование 8 из 32 процессоров, при задании свойству MaxThreads значения -10 верхняя граница пула потоков будет равна 10*8, то есть 80 потокам.

Фактические значения для этого свойства пула потоков заносятся в файл журнала msmdsrv после запуска службы.
VertiPaq \ GroupAffinity строка Массив шестнадцатеричных значений, который соответствует группам процессоров в системе, используемой для задания сходства потоков обработки логическим процессорам в каждой группе процессоров. нет С помощью этого свойства можно создавать пользовательские сходства. По умолчанию это свойство пусто.

См. подробности в разделе Задание параметра GroupAffinity для привязки потоков к процессорам или группе процессоров . Применяется только к табличной модели.

Задание параметра GroupAffinity для привязки потоков к процессорам или группе процессоров

ЗначениеGroupAffinity предоставляется для дополнительной настройки. Свойство GroupAffinity можно использовать для задания сходства между пулами потоков SQL Server Analysis Services и конкретными процессорами. Однако для большинства установок SQL Server Analysis Services работает лучше всего, если можно использовать все доступные логические процессоры. Таким образом, по умолчанию соответствие группы не задано.

Если эксплуатационное тестирование показывает необходимость оптимизации использования ЦП, то, возможно, стоит рассмотреть подход более высокого уровня, например использование диспетчера ресурсов Windows Server для указания сходства между логическими процессорами и процессом сервера. Такой подход может оказаться проще в реализации и управлении, чем определение пользовательских соответствий для отдельных пулов потоков.

Если этого окажется недостаточно для решения задачи, то большей точности можно добиться, определив пользовательские соответствия для пулов потоков. Настройка параметров сходства чаще всего рекомендуется в больших многоядерных системах (как с NUMA, так и без этой технологии), испытывающих снижение производительности из-за распределения пулов потоков по слишком большому числу процессоров. Свойство GroupAffinity можно задать и в системах, где число логических процессоров меньше 64, но выигрыш от этого будет незначительным, или даже произойдет падение производительности.

Примечание

GroupAffinity ограничена выпусками, которые ограничивают количество ядер, используемых SQL Server Analysis Services. При запуске SQL Server Analysis Services использует сведения о выпуске и свойства GroupAffinity для вычисления масок сходства для каждого пула потоков, управляемого SQL Server Analysis Services. В стандартном выпуске могут использоваться максимум 24 ядра. Если установить SQL Server Analysis Services выпуск Standard в большой многоядерной системе с более чем 24 ядрами, SQL Server Analysis Services будет использовать только 24 из них. Дополнительные сведения о максимальных конфигурациях процессоров см. в данных о пределах масштабирования разных выпусков в разделе Функции в выпусках SQL Server.

Синтаксис

Значение является шестнадцатеричным для каждой группы процессоров, а шестнадцатеричное представляет логические процессоры, которые SQL Server Analysis Services пытается использовать первыми при выделении потоков для заданного пула потоков.

Битовая маска для логических процессоров

Можно указать до 64 логических процессоров в пределах одной группы. Битовая маска равна 1 (или 0) для каждого логического процессора в группе, используемого (или не используемого) пулом потоков. После вычисления битовой маски вычисляется шестнадцатеричное значение для GroupAffinity.

Многочисленные группы процессоров

Группы процессоров определяются во время запуска системы. GroupAffinity содержит шестнадцатеричные значения для каждой группы процессоров в списке, разделенном запятыми. При наличии нескольких групп процессоров (до 10 на мощных системах) можно пропустить отдельные группы, указав 0x0. Например, в системе с четырьмя группами процессоров (0, 1, 2, 3) можно исключить группы 0 и 2, введя 0x0 для первого и третьего значения.

<GroupAffinity>0x0, 0xFF, 0x0, 0xFF</GroupAffinity>

Действия при вычислении маски соответствия процессоров

Можно установить параметр GroupAffinity в файле msmdsrv.ini или на странице свойств сервера в SQL Server Management Studio.

  1. Определение количества процессоров и групп процессоров

    Можно загрузить программу Coreinfo из winsysinternals.

    Запустите coreinfo для получения этих сведений из раздела «Сопоставление логических процессоров с группой». Формируется отдельная строка для каждого логического процессора.

  2. Последовательность процессоров справа налево: 7654 3210

    Пример показывает только 8 процессоров (от 0 до 7), но группа процессоров может иметь максимум 64 логических процессора. На сервере Windows уровня предприятия может быть до 10 групп процессоров.

  3. Вычислите битовую маску для групп процессоров, которые собираетесь использовать

    7654 3210

    Замените цифру на 0 или 1 в зависимости от того, нужно включить или исключить логический процессор. В системе с 8 процессорами выбранное вычисление может выглядеть следующим образом, если для служб Analysis Services решено использовать процессоры 7, 6, 5, 4 и 1:

    1111 0010

  4. Преобразование двоичного значения в шестнадцатеричное

    Преобразуйте двоичное значение в шестнадцатеричное с помощью калькулятора или средства преобразования. В нашем примере 1111 0010 преобразуется в 0xF2.

  5. Укажите это шестнадцатеричное значение в свойстве GroupAffinity

    В файле msmdsrv.ini или на странице свойств сервера в Management Studio установите параметр GroupAffinity в значение, которое было вычислено на шаге 4.

Важно!

Установка параметра GroupAffinity выполняется вручную за несколько действий. При вычислении значения GroupAffinityвыполняйте вычисления аккуратно, не допуская ошибок. Хотя SQL Server Analysis Services возвращает ошибку, если вся маска недопустима, сочетание допустимых и недопустимых параметров приводит к SQL Server Analysis Services игнорированию свойства . Например, если битовая маска содержит дополнительные значения, SQL Server Analysis Services игнорирует этот параметр, используя все процессоры в системе. Нет ошибки или предупреждения, которое сообщило бы об этом. Но вы можете проверить файл msmdsrv.log, чтобы узнать, как на самом деле заданы критерии сходства.

Задайте параметр PerNumaNode, чтобы привязать потоки ввода-вывода к процессорам в узле NUMA.

Для многомерных экземпляров служб Analysis Services можно установить параметр PerNumaNode в пуле потоков IOProcess , чтобы еще больше оптимизировать планирование и выполнение потоков. В то время как свойство GroupAffinity определяет набор логических процессоров, используемых для определенного пула потоков, PerNumaNode делает больше, указывая, нужно ли создавать несколько пулов, более точно привязанных к определенному подмножеству разрешенных логических процессоров.

Допустимые значения для PerNumaNode : -1, 0, 1, 2, как описано в подразделе Справочник по свойствам пула потоков этого раздела.

В системах с узлами NUMA рекомендуется использовать параметр по умолчанию PerNumaNode=-1, что позволяет SQL Server Analysis Services настраивать количество пулов потоков и их сходство потоков на основе количества узлов. Если в системе менее 4 узлов, SQL Server Analysis Services реализует поведение, описанное в PerNumaNode=0, тогда как PerNumaNode=1 используется в системах с 4 или более узлами.

Выбор значения

Можно также переопределить значение по умолчанию и использовать другое допустимое значение.

Задание PerNumaNode=0

Узлы NUMA не учитываются. Будет присутствовать только один пул потоков IOProcess, и все потоки в этом пуле будут привязаны ко всем логическим процессорам. Это значение будет использоваться по умолчанию (при PerNumaNode=-1), если компьютер имеет менее 4 узлов NUMA.

Изображение соответствия Numa, процессора и пула потоков #1 Соответствие

Задание PerNumaNode=1

Пулы потоков IOProcess создаются для каждого узла NUMA. Наличие отдельных пулов потоков способствует улучшению координируемого доступа к локальным ресурсам, например к локальному кэшу на узле NUMA.

Numa, процессор и пул потоков, изображение соответствия.

Задание PerNumaNode=2

Этот параметр предназначен для высококлассных систем, выполняющих интенсивные рабочие нагрузки. Это свойство задает привязку пула потоков IOProcess на самом детальном уровне, создавая и привязывая пулы на уровне логических процессоров.

В следующем примере в системе с 4 узлами NUMA и 32 логическими процессорами задание параметру PerNumaNode значения 2 приведет к созданию 32 пулов потоков IOProcess. Потоки в первых 8 пулах будут привязаны ко всем логическим процессорам в узле 0, но идеальный процессор будет назначен для 0, 1, 2... до 7. Следующие 8 пулов потоков будут привязаны ко всем логическим процессорам в узле 1 NUMA, идеальный процессор будет назначен для 8, 9, 10... до 15 и т. д.

Numa, процессор и пул потоков, изображение соответствия.

На этом уровне соответствия планировщик всегда сначала пытается использовать идеально подходящий логический процессор в предпочитаемом узле NUMA. Если логический процессор недоступен, то планировщик выбирает один процессор в том же узле или в той же группе процессоров, если другие потоки недоступны. Дополнительные сведения и примеры см. в статье Параметры конфигурации служб Analysis Services 2012 (блог Wordpress).

Распределение нагрузки между потоками IOProcess

При установке значения для свойства PerNumaNode следует знать, как используются потоки IOProcess , что поможет принять более обоснованное решение.

Напомним, что IOProcess используется для заданий ввода-вывода, связанных с запросами подсистемы хранилища в многомерном модуле.

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

В следующих сценариях предлагаются корректировки, которые иногда могут увеличить производительность запросов в системах NUMA.

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

    Кроме того, если нельзя создать дополнительные секции, попробуйте установить параметр PerNumaNodeна 0, чтобы увеличить количество потоков, доступных в пуле потоков 0.

  • Для баз данных, в которых операции сканирования сегмента равномерно распределены по нескольким секциям, установка PerNumaNode равным 1 или 2 может улучшить производительность запросов, так как это увеличит общее количество используемых системой пулов потоков IOProcess .

  • Для решений, которые имеют несколько секций, но только на одну из них приходится значительная нагрузка сканирования, попробуйте задать PerNumaNode=0 и проверьте, повысится ли при этом производительность.

Несмотря на то что в операциях сканирования секций и измерений используется пул потоков IOProcess , в сканированиях измерений участвует только пул потоков 0. Это может привести к слегка неравномерной загрузке данного пула потоков, но дисбаланс должен быть временным, так как операции сканирования измерений применяются редко и выполняются очень быстро.

Примечание

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

Дополнительные сведения об архитектуре заданий см. в разделе 2.2 руководства по производительности служб SQL Server Analysis Services.

Как описано в разделе 2.4 руководства по использованию служб Analysis Services, при увеличении пула потоков обработки следует убедиться, что параметры CoordinatorExecutionMode , а также параметры CoordinatorQueryMaxThreads имеют значения, которые в полной мере позволяют использовать увеличенный размер пула потоков.

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

Значение по умолчанию для CoordinatorExecutionMode равно -4, что ставит предел в 4 параллельных заданиях на ядро и ограничивает общее количество заданий координатора, которые могут параллельно выполняться запросом вложенного куба в подсистеме хранилища.

Значение по умолчанию для CoordinatorQueryMaxThreads равно 16, что ограничивает число сегментов заданий, которые могут выполняться параллельно для каждой секции.

Определение текущих параметров пула потоков

При каждом запуске службы SQL Server Analysis Services выводит текущие параметры пула потоков в файл msmdsrv.log, включая минимальные и максимальные потоки, маску сходства процессора и параллелизм.

В следующем примере дан отрывок из файла журнала, где показываются параметры по умолчанию для пула потоков Query (MinThread=0, MaxThread=0, Concurrency=2) в 4-ядерной системе с включенной функцией управления потоками. Маска сходства — 0xFF, что означает 8 логических процессоров. Обратите внимание, что к маске добавлены нули в начале. Не обращайте на них внимание.

"10/28/2013 9:20:52 AM) Message: The Query thread pool now has 1 minimum threads, 16 maximum threads, and a concurrency of 16. Its thread pool affinity mask is 0x00000000000000ff. (Source: \\?\C:\Program Files\Microsoft SQL Server\MSAS11.MSSQLSERVER\OLAP\Log\msmdsrv.log, Type: 1, Category: 289, Event ID: 0x4121000A)"

Помните, что алгоритм для установки параметра MinThread и MaxThread опирается на системную конфигурацию, в частности на число процессоров. Вычисление значения описывается в записи блога Параметры конфигурации служб Analysis Services 2012 (блог Wordpress). Обратите внимание, что эти параметры и стратегии могут быть изменены в последующих выпусках.

В следующем списке показаны примеры других масок сходства для различных сочетаний процессоров:

  • Соответствие для процессоров 3-2-1-0 в 8-ядерной системе в этой битовой маске: 00001111 и шестнадцатеричное значение: 0xF

  • Соответствие для процессоров 7-6-5-4 в 8-ядерной системе в этой битовой маске: 11110000 и шестнадцатеричное значение: 0xF0

  • Соответствие для процессоров 5-4-3-2 в 8-ядерной системе в этой битовой маске: 00111100 и шестнадцатеричное значение: 0x3C

  • Соответствие для процессоров 7-6-1-0 в 8-ядерной системе в этой битовой маске: 11000011 и шестнадцатеричное значение: 0xC3

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

Сведения о msmdsrv.ini

Файл msmdsrv.ini в SQL Server Analysis Services содержит параметры конфигурации для экземпляра, влияющие на все базы данных, работающие на этом экземпляре. Нельзя использовать свойства конфигурации сервера для оптимизации производительности только одной базы данных за счет других. Однако можно установить несколько экземпляров SQL Server Analysis Services и настроить каждый экземпляр для использования свойств, которые полезны базам данных с аналогичными характеристиками или рабочими нагрузками.

Все свойства конфигурации сервера содержатся в файле msmdsrv.ini. Подмножества этих свойств, которые изменяются чаще всего, доступны также в средствах управления, таких как среда SSMS. Содержимое msmdsrv.ini идентично как для табличных, так и для многомерных экземпляров, однако некоторые параметры применяются только к одному режиму. Различия в поведении, зависящие от режима сервера, указаны в справочной документации свойства.

См. также раздел

Сведения о процессах и потоках
Несколько процессоров
Группы процессоров
Руководство по использованию служб SQL Server Analysis Services