Степень параллелизма
SQL Server автоматически обнаруживает высшую степень параллелизма для каждого экземпляра параллельного выполнения запроса или индекс операции языка DDL. Это осуществляется на основе следующих критериев.
Работает ли SQL Server на компьютере, имеющем более одного микропроцессора или ЦП (таком как симметричный многопроцессорный компьютер (SMP)).
Использовать параллельные запросы могут только компьютеры, имеющие более одного ЦП.
Достаточно ли доступных потоков.
Каждый запрос или операция с индексами требуют определенного числа потоков, подлежащих выполнению. Для выполнения параллельного плана требуется больше потоков, чем для выполнения последовательного плана, и число запрашиваемых потоков возрастает по мере увеличения степени параллелизма. Когда требование к потокам параллельного плана для определенной степени параллелизма не может быть удовлетворено, компонент Database Engine уменьшает степень параллелизма автоматически или полностью отказывается от параллельного плана в указанном контексте рабочей нагрузки. В таком случае начинается выполнение последовательного плана (один поток).
Тип выполняемого запроса или операции с индексами.
Операции с индексами, которые создают или перестраивают индекс или удаляют кластеризованный индекс и запросы, интенсивно использующие циклы ЦП, являются лучшими кандидатами для параллельного плана. Например, хорошими кандидатами являются соединения больших таблиц, больших статистических выражений и сортировка больших результирующих наборов. Простые запросы, часто находящиеся в приложениях обработки транзакций, находят дополнительную координацию, запрашиваемую для выполнения запроса в параллельном перевешивании возможного повышения производительности. Чтобы отличить запросы, которые выигрывают от параллелизма, и запросы, которые не выигрывают, компонент Database Engine сравнивает предполагаемую стоимость выполняемого запроса или операции с индексами со значением cost threshold for parallelism. Несмотря на то, что это не рекомендуется, пользователи могут менять значение по умолчанию 5 при помощи процедуры sp_configure.
Достаточно ли число строк, подлежащих обработке.
Если оптимизатор запросов устанавливает, что число строк слишком мало, то для распространения строк он не вставляет операторы преобразования валюты. Следовательно, операторы обрабатываются последовательно. Обработка операторов в последовательном плане позволяет избежать сценариев, когда стоимость запуска, распределения и координации превышает преимущества, достигнутые параллельной обработкой оператора.
Доступна ли статистика распределения.
Если наивысшая степень параллелизма невозможна, более низкие степени рассматриваются до того, как отвергается параллельный план.
Например, статистика распределения не может вычисляться при создании кластеризованного индекса на представлении, потому что кластеризованный индекс еще не существует. В таком случае компонент Database Engine не может предоставить наивысшую степень параллелизма для операции с индексами. Однако некоторые операторы, такие как сортировка и сканирование, по-прежнему могут выигрывать от параллельной обработки.
Примечание |
---|
Параллельные операции с индексами доступны только в выпусках SQL Server Developer Edition, Evaluation Edition и 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 в значение 0, можно настроить SQL Server на использование всех доступных процессоров (до 64) при выполнении параллельных планов. Установив параметр конфигурации сервера MAXDOP в значение 0 для запросов и индексов, можно настроить SQL Server на использование всех доступных процессоров (до 64) при выполнении параллельных планов с данными запросами или индексами.