Параллельная обработка запросов

SQL Server обеспечивает параллельную обработку запросов, оптимизирующую выполнение запросов и операции с индексами на компьютерах, где установлено несколько микропроцессоров (ЦП). Благодаря возможностям параллельной обработки запроса и операций с индексами при помощи нескольких потоков операционной системы SQL Server выполняет эти операции быстрее и эффективнее.

Во время оптимизации запроса SQL Server пытается обнаружить запросы и операции с индексами, которые можно ускорить за счет параллельного выполнения. Для таких запросов SQL Server вставляет в план выполнения операторы обмена, чтобы подготовить запрос к параллельной обработке. Операторы обмена служат для управления процессом, перераспределения данных и управления потоком. К ним относятся логические операторы Distribute Streams, Repartition Streams и Gather Streams (в качестве подтипов), один или несколько из которых появляются в выводе инструкции Showplan плана запроса для параллельного запроса.

После вставки операторов обмена получается план параллельного выполнения запроса. План параллельного выполнения запроса может использовать несколько потоков. План последовательного выполнения, который используется для обработки непараллельных запросов, использует только один поток. Фактическое количество потоков параллельного выполнения запроса определяется при инициализации плана выполнения запроса и зависит от сложности и степени параллелизма плана. Степень параллелизма определяет максимальное количество используемых ЦП, а не количество используемых потоков. Степень параллелизма устанавливается на уровне сервера и изменяется системной хранимой процедурой sp_configure. Это значение можно переопределить для отдельных инструкций запроса или индекса при помощи подсказки в запросе MAXDOP или параметра индекса MAXDOP.

Оптимизатор запросов SQL Server не использует план параллельного выполнения для запроса, если выполняется любое из следующих условий:

  • Затраты на последовательное выполнение запроса не настолько высоки, чтобы альтернативой ему считался план параллельного выполнения.

  • План последовательного выполнения признан более быстрым, чем любой другой возможный план параллельного выполнения данного запроса.

  • Запрос содержит скалярные или реляционные операторы, параллельное выполнение которых невозможно. Определенные операторы могут привести к выполнению участка запроса или всего плана целиком в последовательном режиме.