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


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

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

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

Этот раздел состоит из следующих подразделов.

Примечание

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

Управление потоками в службах Analysis Services

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

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

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

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

Настраиваемое сходство можно задать для любого из пяти пулов потоков, используемых для различных рабочих нагрузок служб Analysis Services:

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

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

    Примечание

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

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

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

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

Примечание

Хотя Msmdsrv.ini имеет параметры пула потоков в VertiPaq разделе и\VertiPaqThreadPoolCPUs\GroupAffinityThreadPool\намеренно не документируются. Эти свойства в настоящий момент недействительны и зарезервированы для использования в будущем.

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

Примечание

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

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

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

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

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

Имя Тип Описание По умолчанию Руководство
IOProcess \ Concurrency 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 Дополнительное свойство, которое следует изменять только под руководством службы поддержки Майкрософт.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Примечание

GroupAffinity ограничивается выпусками, которые лимитируют количество ядер, используемых службами Analysis Services. При запуске службы Analysis Services используют сведения о выпуске GroupAffinity и свойства для вычисления масок сходства для каждого из 5 пулов потоков, управляемых службами Analysis Services. В стандартном выпуске могут использоваться самое большее 16 ядер. Если стандартный выпуск служб Analysis Services устанавливается в большой многоядерной системе, имеющей больше 16 ядер, то в Analysis Services используются только 16 из них. При обновлении экземпляра Enterprise более ранней версии ограничение составляет 20 ядер. Дополнительные сведения о выпусках и лицензировании см. в разделе Общие сведения о лицензировании SQL Server 2012.

Синтаксис

Значение является шестнадцатеричным для каждой группы процессоров, а шестнадцатеричное представляет логические процессоры, которые службы 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тщательно проверка вычисления. Хотя службы Analysis Services возвращают ошибку, если вся маска недопустима, сочетание допустимых и недопустимых параметров приводит к тому, что службы Analysis Services игнорируют свойство . Например, если битовая маска содержит дополнительные значения, службы Analysis Services игнорируют этот параметр, используя все процессоры в системе. Нет ошибки или предупреждения, которое сообщило бы об этом. Но вы можете проверить файл msmdsrv.log, чтобы узнать, как на самом деле заданы критерии сходства.

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

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

Примечание

Чтобы узнать число узлов NUMA в Windows Server 2012, используйте диспетчер задач. В диспетчере задач на вкладке "Производительность" выберите ЦП , а затем щелкните правой кнопкой мыши область диаграммы для просмотра узлов NUMA. Или же загрузите программу Coreinfo из Windows Sysinternals и запустите coreinfo -n , что позволит узнать число узлов NUMA и количество логических процессоров в каждом узле.

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

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

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

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

Задание PerNumaNode=0

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

Соответствие Numa, процессоров и пула потоков

Задание PerNumaNode=1

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

Соответствие Numa, процессоров и пула потоков

Задание PerNumaNode=2

Этот параметр предназначен для высококлассных систем, выполняющих интенсивные рабочие нагрузки служб Analysis Services. Это свойство задает привязку пула потоков 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 2008 Analysis Services.

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

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

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

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

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

При каждом запуске службы службы 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 содержит параметры конфигурации для экземпляра служб Analysis Services, влияющие на все базы данных, работающие в этом экземпляре. Нельзя использовать свойства конфигурации сервера для оптимизации производительности только одной базы данных за счет других. Однако можно установить несколько экземпляров служб Analysis Services и настроить каждый экземпляр для использования свойств, которые используют базы данных с похожими характеристиками или рабочими нагрузками.

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

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

Примечание

Инструкции по заданию этих свойств см. в разделе Configure Server Properties in Analysis Services.

См. также:

Сведения о процессах ипотоках. Изменения пула потоков служб Analysis Services впараметрах конфигурации SQL Server 2012 Analysis Services 2012 (блог Wordpress)Вспомогательные системы с более чем 64 процессорамиSQL Server 2008 R2 Analysis Services Operations Guide