Степень параллелизма
SQL Server 2005 автоматически обнаруживает лучшую степень параллелизма для каждого экземпляра параллельного выполнения запроса или индекс операции языка DDL. Это осуществляется на основе следующих критериев.
- Работает ли SQL Server на компьютере, имеющем более одного микропроцессора или ЦП (таком как симметричный многопроцессорный компьютер (SMP)).
Использовать параллельные запросы могут только компьютеры, имеющие более одного ЦП. - Достаточно ли доступных потоков.
Каждый запрос или операция индексирования требуют определенного числа потоков, подлежащих выполнению. Для выполнения параллельного плана требуется больше потоков, чем для выполнения последовательного плана, и число запрашиваемых потоков возрастает по мере увеличения степени параллелизма. Когда требование потока параллельного плана для особой степени параллелизма не может быть удовлетворено, компонент Database Engine уменьшает степень параллелизма автоматически или полностью отвергает параллельный план в указанном контексте рабочей нагрузки. В таком случае начинается выполнение последовательного плана (один поток). - Тип выполняемого запроса или операции индексирования.
Операции индексирования, которые создают или перестраивают индекс или удаляют кластеризованный индекс и запросы, интенсивно использующие циклы ЦП, являются лучшими кандидатами для параллельного плана. Например, хорошими кандидатами являются соединения больших таблиц, больших статистических выражений и сортировка больших результирующих наборов. Простые запросы, часто находящиеся в приложениях обработки транзакций, находят дополнительную координацию, запрашиваемую для выполнения запроса в параллельном перевешивании возможного повышения производительности. Чтобы различить запросы, которые выигрывают от параллелизма, и запросы, которые не выигрывают, компонент Database Engine сравнивает предполагаемую стоимость выполняемого запроса или операции индексирования со значением cost threshold for parallelism. Несмотря на то, что это не рекомендуется, пользователи могут менять значение по умолчанию 5 при помощи процедуры sp_configure. - Достаточно ли число строк, подлежащих обработке.
Если оптимизатор запросов устанавливает, что число строк слишком мало, то для распространения строк он не вставляет операторы преобразования валюты. Следовательно, операторы обрабатываются последовательно. Обработка операторов в последовательном плане позволяет избежать сценариев, когда стоимость запуска, распределения и координации превышает преимущества, достигнутые параллельной обработкой оператора. - Доступна ли статистика распределения.
В ранних версиях SQL Server компонент Database Engine отвергал параллельные планы, если доступная статистика предохраняла компонент Database Engine от предоставления наивысшей степени параллелизма. В сервере SQL Server 2005, если наивысшая степень параллелизма невозможна, более низкие степени рассматриваются до того, как отвергается параллельный план.
Например, статистика распределения не может вычисляться при создании кластеризованного индекса на представлении, потому что кластеризованный индекс еще не существует. В таком случае компонент Database Engine не может предоставить наивысшую степень параллелизма для операции индексирования. Однако некоторые операторы, такие как сортировка и сканирование, по-прежнему могут выигрывать от параллельной обработки.
Примечание. |
---|
Параллельные операции с индексом доступны только в выпуске SQL Server 2005 Enterprise Edition. |
Во время выполнения компонент Database Engine устанавливает, разрешены ли описанные ранее текущая рабочая нагрузка системы и сведения о конфигурации для параллельного выполнения. Если параллельное выполнение гарантировано, компонент Database Engine устанавливает оптимальное число потоков и распределяет выполнение параллельного плана по этим потокам. Когда запрос или операция индексирования начинает выполнение на нескольких потоках для параллельного выполнения, такое же число потоков используется до тех пор, пока операция не будет завершена. компонент Database Engine перепроверяет оптимальное число решений потоков всякий раз, когда план выполнения извлекается из кэша процедуры. Например, одно выполнение запроса может привести к использованию последовательного плана, последующее выполнение того же запроса может привести к параллельному плану, использующему три потока, а третье выполнение может привести к параллельному плану, использующему четыре потока.
В плане параллельного выполнения запроса операторы вставки, обновления и удаления обрабатываются последовательно. Однако предложение WHERE инструкции UPDATE или DELETE или часть SELECT инструкции INSERT могут обрабатываться параллельно. В таком случае изменения фактических данных последовательно применяются к базе данных.
Статические курсоры и курсоры, управляемые набором ключей, могут быть заполнены параллельными планами выполнения. Однако поведение динамических курсоров может поддерживаться только последовательным выполнением. Оптимизатор запросов всегда формирует последовательный план выполнения для запроса, являющегося частью динамического курсора.
Переопределение степеней параллелизма
Чтобы ограничить число процессоров для использования в параллельном плане выполнения, можно использовать параметр конфигурации сервера max degree of parallelism. Для отдельного запроса и инструкций операции индексирования параметр max degree of parallelism можно переопределить, указав в запросе подсказку MAXDOP или параметр индекса MAXDOP. Параметр MAXDOP предоставляет улучшенное управление через отдельные запросы и операции индексирования. Например, можно использовать параметр MAXDOP для управления, увеличивая или уменьшая число процессоров, выделенных для оперативной индексной операции. Таким образом, можно сбалансировать ресурсы, используемые операцией индексирования с теми текущими пользователями.
См. также
Основные понятия
Установка параметров конфигурации сервера
Параметр max degree of parallelism
Параллельная обработка запросов
Параллельные операции над индексами
Другие ресурсы
Хранимая процедура sp_configure (Transact-SQL)
Подсказка в запросе (Transact-SQL)