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

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

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

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

Замечание

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

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

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

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

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

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

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

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

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

    Замечание

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

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

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

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

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

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

Замечание

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Дополнительные сведения см. в разделе Set GroupAffinity для сопоставления потоков с процессорами в группе процессоров . Применяется только к табличному режиму.

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

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

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

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

Замечание

GroupAffinity ограничивается выпусками, ограничивающими количество ядер, используемых службами SQL Server Analysis Services. При запуске SQL Server Analysis Services использует сведения о выпуске и свойства GroupAffinity для вычисления маск сходства для каждого пула потоков, управляемого службами SQL Server Analysis Services. Выпуск Standard может использовать не более 24 ядер. Если установить стандартный выпуск SQL Server Analysis Services на большой многоядерный системе с более чем 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 в зависимости от того, следует ли исключить или включить логический процессор. В системе с восемью процессорами вычисление может выглядеть следующим образом, если вы хотите использовать процессоры 7, 6, 5, 4 и 1 для служб Analysis Services:

    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 Numa

Настройка PerNumaNode=1

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

Изображение соответствия numa, обработчика и пула потоков #2

Настройка PerNumaNode=2

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

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

Изображение соответствия numa, обработчика и пула потоков #3 Numa

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

Распределение рабочих операций между потоками IOProcess

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

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

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

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

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

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

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

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

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

Замечание

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

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

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

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

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

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

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

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

В следующем примере показан фрагмент из файла журнала, показывающий параметры по умолчанию для пула потоков запросов (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