Настройка параллельных операций с индексами
В многопроцессорных компьютерах, где установлен выпуск SQL Server Enterprise, индексные инструкции могут использовать больше процессоров для выполнения операций просмотра, сортировки и операций с индексами, связанных с индексной инструкцией, как это делают другие запросы. Число процессоров, задействованных при выполнении одной индексной инструкции, определяется параметром конфигурации max degree of parallelism, текущей рабочей нагрузкой и статистикой индекса. Параметр max degree of parallelism определяет максимальное число процессоров, используемых при параллельном выполнении плана. Если компонент SQL Server Database Engine определяет, что система загружена, степень параллелизма операции с индексами автоматически уменьшается перед началом выполнения инструкции. Компонент Database Engine уменьшает также степень параллелизма, если ведущий ключевой столбец несекционированного индекса имеет ограниченное число различных значений или частота появления таких значений существенно изменяется.
Примечание |
---|
Параллельные операции с индексами доступны только в выпусках SQL Server Developer Edition, Evaluation Edition и Enterprise Edition. |
Число процессоров, используемых оптимизатором запросов, как правило, обеспечивает оптимальную производительность. Однако некоторые операции, например создание, перестроение или удаление очень больших индексов, требуют большого количества ресурсов и могут привести к нехватке ресурсов для других приложений и операций базы данных на время выполнения операции с индексами. При возникновении этой проблемы можно вручную установить максимальное количество процессоров, которые используются при выполнении индексной инструкции, указав параметр индекса 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 AdventureWorks;
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 (VendorID)
WITH (MAXDOP=8);
GO
См. также