Настройка параллельных операций с индексами

На многопроцессорных компьютерах, где установлен выпуск SQL Server Enterprise, индексные инструкции могут использовать несколько процессоров для выполнения операций просмотра, сортировки и операций с индексами, связанных с индексной инструкцией, как это делают другие запросы. Число процессоров, задействованных при выполнении одной индексной инструкции, определяется параметром конфигурации max degree of parallelism, текущей рабочей нагрузкой и статистикой индекса. Параметр max degree of parallelism определяет максимальное число процессоров, используемых при параллельном выполнении плана. Если компонент SQL Server Database Engine определяет, что система загружена, степень параллелизма операции с индексами автоматически уменьшается перед началом выполнения инструкции. Компонент Database Engine уменьшает также степень параллелизма, если ведущий ключевой столбец несекционированного индекса имеет ограниченное число различных значений или частота появления таких значений существенно изменяется.

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

Параллельные операции с индексами доступны только в выпусках SQL Server Developer, Evaluation и Enterprise.

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

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

Значение

Описание

0

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

1

Подавляет создание параллельных планов. Операция будет выполнена последовательно.

2-64

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

Параллельное выполнение индексов и параметр индекса MAXDOP применяются в следующих инструкциях Transact-SQL:

  • CREATE INDEX

  • ALTER INDEX REBUILD

  • DROP INDEX (применяется только для кластеризованных индексов)

  • ALTER TABLE ADD (индекс) CONSTRAINT

  • ALTER TABLE ADD (кластеризованный индекс) CONSTRAINT

Все семантические правила, используемые с параметром конфигурации max degree of parallelism, применимы, если используется параметр индекса MAXDOP. Дополнительные сведения см. в разделе Параметр max degree of parallelism.

При выполнении инструкции ALTER INDEX REORGANIZE с предложением LOB_COMPACTION или без него значение max degree of parallelism является однопотоковой операцией. Параметр индекса MAXDOP не может быть задан в инструкции ALTER INDEX REORGANIZE.

Операции с индексами в сети

Операции с индексами в сети обеспечивают параллельную деятельность пользователей во время индексной операции. Можно использовать параметр MAXDOP с целью управления максимальным количеством процессоров, используемых для операции с индексами в сети. Таким образом можно сбалансировать ресурсы, используемые операциями с индексами, и ресурсы, используемые параллельными пользователями. Дополнительные сведения см. в разделе Выполнение операции с индексами в сети.

Операции с секционированными индексами

Операции с секционированными индексами, для которых необходима сортировка, могут требовать больше памяти, если оптимизатор запросов применяет степени параллелизма к операциям построения. Чем выше степень параллелизма, тем больше требуется памяти. Дополнительные сведения см. в разделе Дополнительные рекомендации по секционированным индексам.

Примеры

Следующий пример создает индекс IX_ProductVendor_VendorID таблицы ProductVendor и устанавливает параметр max degree of parallelism в значение 8. Предполагая, что сервер имеет восемь или более процессоров, компонент Database Engine ограничит выполнение операции с индексами восемью или меньшим количеством процессоров.

USE AdventureWorks2008R2;
GO
IF EXISTS (SELECT name FROM sys.indexes
            WHERE name = N'IX_ProductVendor_VendorID')
    DROP INDEX IX_ProductVendor_VendorID ON Purchasing.ProductVendor;
GO
CREATE INDEX IX_ProductVendor_VendorID 
ON Purchasing.ProductVendor (BusinessEntityID)
WITH (MAXDOP=8);
GO