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

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

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

В этом разделе содержатся следующие подразделы:

  • Thread Management in Analysis Services

  • Thread Pool Property Reference

  • Set GroupAffinity to affinitize IO threads to logical processors in a processor group

  • Set PerNumaNode to create multiple IOProcess thread pools affinitized to a NUMA node

  • Determine current thread pool settings

  • Dependent or Related Properties

  • About MSMDSRV.INI

ПримечаниеПримечание

Табличное развертывание в системах 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:

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

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

    ПримечаниеПримечание

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

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

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

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

ПримечаниеПримечание

Хотя в файле Msmdsrv.ini и есть параметры пула потоков в разделе VertiPaq, свойства VertiPaq\ThreadPool\GroupAffinity и ThreadPool\CPUs специально не документированы. Эти свойства в данный момент не применяются и зарезервированы на будущее.

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

ПримечаниеПримечание

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

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

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

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

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

Название

Тип

Описание

По умолчанию

Руководство

IOProcess \ Concurrency

double

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

2.0

Дополнительное свойство, которое следует изменять только под руководством службы поддержки Microsoft.

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

Применяется только к многомерным моделям.

IOProcess \ GroupAffinity

строка

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

нет

С помощью этого свойства можно создавать пользовательские сходства. По умолчанию это свойство пусто.

Дополнительные сведения см. в разделе Set 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). В системах, где число узлов 4 и более, обнаруживается такое же поведение, как и для 1 (пулы потоков IOProcess создаются для каждого узла).

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

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

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

Дополнительные сведения см. в разделе Set PerNumaNode.

Применяется только к многомерным моделям.

IOProcess \ PriorityRatio

int

32-разрядное целое число со знаком, которое используется в том случае, если требуется, чтобы иногда выполнялись потоки с более низким приоритетом, даже если очередь с более высоким приоритетом не пуста.

2

Дополнительное свойство, которое следует изменять только под руководством службы поддержки Microsoft.

Применяется только к многомерным моделям.

IOProcess \ StackSizeKB

int

32-разрядное целое число со знаком, которое можно использовать для настройки выделения памяти во время выполнения потоков.

0

Дополнительное свойство, которое следует изменять только под руководством службы поддержки Microsoft.

Применяется только к многомерным моделям.

Parsing \ Long \ Concurrency

double

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

2.0

Дополнительное свойство, которое следует изменять только под руководством службы поддержки Microsoft.

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

Parsing \ Long \ GroupAffinity

строка

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

нет

С помощью этого свойства можно создавать пользовательские сходства. По умолчанию это свойство пусто.

Дополнительные сведения см. в разделе Set GroupAffinity.

Parsing \ Long \ NumThreads

int

Свойство с 32-разрядным целочисленным значением со знаком, определяющее количество потоков, которое можно создать для длинных команд.

0

0 указывает, что сервер сам определяет значения по умолчанию. По умолчанию параметру NumThreads задается абсолютное значение 4 или умноженное на 2 число логических процессоров в зависимости от того, какое значение выше.

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

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

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

Parsing \ Long \ PriorityRatio

int

32-разрядное целое число со знаком, которое используется в том случае, если требуется, чтобы иногда выполнялись потоки с более низким приоритетом, даже если очередь с более высоким приоритетом не пуста.

0

Дополнительное свойство, которое следует изменять только под руководством службы поддержки Microsoft.

Parsing \ Long \ StackSizeKB

int

32-разрядное целое число со знаком, которое можно использовать для настройки выделения памяти во время выполнения потоков.

0

Дополнительное свойство, которое следует изменять только под руководством службы поддержки Microsoft.

Parsing \ Short \ Concurrency

double

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

2.0

Дополнительное свойство, которое следует изменять только под руководством службы поддержки Microsoft.

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

Parsing \ Short \ GroupAffinity

строка

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

нет

С помощью этого свойства можно создавать пользовательские сходства. По умолчанию это свойство пусто.

Дополнительные сведения см. в разделе Set GroupAffinity.

Parsing \ Short \ NumThreads

int

Свойство с 32-разрядным целочисленным значением со знаком, определяющее количество потоков, которое можно создать для коротких команд.

0

0 указывает, что сервер сам определяет значения по умолчанию. По умолчанию параметру NumThreads задается абсолютное значение 4 или умноженное на 2 число логических процессоров в зависимости от того, какое значение выше.

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

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

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

Parsing \ Short \ PriorityRatio

int

32-разрядное целое число со знаком, которое используется в том случае, если требуется, чтобы иногда выполнялись потоки с более низким приоритетом, даже если очередь с более высоким приоритетом не пуста.

0

Дополнительное свойство, которое следует изменять только под руководством службы поддержки Microsoft.

Parsing \ Short \ StackSizeKB

int

32-разрядное целое число со знаком, которое можно использовать для настройки выделения памяти во время выполнения потоков.

64 * число логических процессоров

Дополнительное свойство, которое следует изменять только под руководством службы поддержки Microsoft.

Process \ Concurrency

double

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

2.0

Дополнительное свойство, которое следует изменять только под руководством службы поддержки Microsoft.

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

Process \ GroupAffinity

строка

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

нет

С помощью этого свойства можно создавать пользовательские сходства. По умолчанию это свойство пусто.

Дополнительные сведения см. в разделе Set 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

Дополнительное свойство, которое следует изменять только под руководством службы поддержки Microsoft.

Process \ StackSizeKB

int

32-разрядное целое число со знаком, которое можно использовать для настройки выделения памяти во время выполнения потоков.

0

Дополнительное свойство, которое следует изменять только под руководством службы поддержки Microsoft.

Query \ Concurrency

double

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

2.0

Дополнительное свойство, которое следует изменять только под руководством службы поддержки Microsoft.

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

Query \ GroupAffinity

строка

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

нет

С помощью этого свойства можно создавать пользовательские сходства. По умолчанию это свойство пусто.

Дополнительные сведения см. в разделе Set 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

Дополнительное свойство, которое следует изменять только под руководством службы поддержки Microsoft.

Query \ StackSizeKB

int

32-разрядное целое число со знаком, которое можно использовать для настройки выделения памяти во время выполнения потоков.

0

Дополнительное свойство, которое следует изменять только под руководством службы поддержки Microsoft.

Установите свойство 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, как описано в разделе Thread Pool Property Reference в этой статье.

По умолчанию (рекомендуется)

В системах, где есть узлы 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 пулах потоков будут привязаны ко всем логическим процессорам в узле NUMA 0, но идеальный процессор будет задан для пулов 0, 1, 2 и до 7. Следующие 8 пулов потоков будут привязаны ко всем логическим процессорам в узле NUMA 1 с идеальным процессором, заданным для 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. Однако некоторые параметры применяются только в одном из этих режимов. Различия в поведении, зависящие от режима сервера, указаны в справочной документации свойства.

ПримечаниеПримечание

Инструкции по настройке свойств см. в разделе Настройка свойств сервера в службах Analysis Services.

См. также

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

О процессах и потоках

Несколько процессоров

Группы процессоров

Изменения в пулах потоков служб SQL Server 2012 Analysis Services

Параметры конфигурации служб Analysis Services 2012

Поддержка систем, где используется более 64 процессоров

Руководство по операциям SQL Server 2008 R2 Analysis Services