Параллельные операции с индексами
Планы запросов, построенные для операций создания или перестроения индекса либо удаления кластеризованного индекса, поддерживают возможность параллельной, многопоточной обработки на многопроцессорных компьютерах.
Примечание |
---|
Параллельные операции с индексами доступны только в выпуске SQL Server 2008 Enterprise Edition. |
В SQL Server используются одни и те же алгоритмы определения степени параллелизма (общего числа запускаемых отдельных потоков) как для операций с индексами, так и для других запросов. Максимальная степень параллелизма для операции с индексом определяется параметром конфигурации сервера max degree of parallelism. Значение max degree of parallelism можно переопределять для отдельных операций с индексами путем настройки параметра индекса MAXDOP в инструкциях CREATE INDEX, ALTER INDEX, DROP INDEX и ALTER TABLE.
Когда компонент Database Engine строит план выполнения индекса, количество параллельных операций устанавливается на наиболее низкое из перечисленных ниже значений.
Число микропроцессоров (ЦП) в компьютере.
Число, указанное в качестве параметра конфигурации сервера max degree of parallelism.
Число ЦП, не превышающих порог загруженности рабочими потоками SQL Server.
Например, на компьютере с восемью ЦП, на котором значение max degree of parallelism равно 6, для операции с индексом создается не более шести параллельных потоков. Если пять ЦП на компьютере загружены рабочими потоками SQL Server сверх порогового значения при построении плана выполнения индекса, в этом плане задаются только три параллельных потока.
Главные фазы параллельных операций с индексами таковы.
Координирующий поток быстро и случайным образом просматривает таблицу для оценки распределения ключей индекса. Координирующий поток устанавливает ключевые границы, образующие число диапазонов ключей, равное степени параллелизма, где каждый диапазон по оценке должен покрывать примерно одинаковое число строк. Например, если в таблице 4 миллиона строк, а степень параллелизма равна 4, координирующий поток определит ключевые значения, ограничивающие четыре набора строк по миллиону каждый. Если для использования всех ЦП невозможно установить достаточное число диапазонов ключей, степень параллелизма соответствующим образом снижается.
Координирующий поток запускает число потоков, равное степени параллелизма операций, и ожидает завершения работы этих потоков. Каждый из потоков просматривает базовую таблицу, используя фильтр, получающий только строки с ключевыми значениями в пределах диапазона, назначенного данному потоку. Каждый поток выполняет построение индексной структуры для строк в своем диапазоне ключей. В случае секционированного индекса каждый из потоков выполняет построение указанного числа секций. Одни и те же секции между несколькими потоками не разделяются. Дополнительные сведения о построении индекса см. в разделе База данных tempdb и создание индекса.
После завершения работы всех параллельных потоков координирующий поток связывает компоненты индекса в единый индекс. Эта фаза применяется только для автономных операций с индексами.
В отдельных инструкциях CREATE TABLE или ALTER TABLE могут содержаться несколько ограничений, требующих создания индекса. Такие множественные операции по созданию индекса выполняются последовательно, хотя каждая из них может быть параллельной операцией на многопроцессорном компьютере.