SQL 2008 не выполняет параллелизм с верхним предложением - PullRequest
1 голос
/ 17 ноября 2011

В настоящее время ведется работа по повышению эффективности нескольких запросов.Посмотрев план запроса, я обнаружил, что SQL не выполняет параллелизм при наличии верхнего предложения, увеличивая время запроса с 1-2 секунд до нескольких минут.

В рассматриваемом запросе используется представление с различными объединениями и объединениями. Я ищу общий ответ / понимание того, почему это происходит, - Google до сих пор меня не подводил.

Спасибо

Ответы [ 2 ]

2 голосов
/ 17 ноября 2011

Как вы знаете,

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

  • Когда количество процессоров превышает количество активных соединений.
  • Когда расчетная стоимость последовательного выполнения запроса выше порога плана запроса (Расчетная стоимость относится к истекшему времени в секундах, необходимому для последовательного выполнения запроса.)

Однако некоторые типы операторов нельзя обрабатывать параллельно, если они не содержат предложений. Например, UPDATE, INSERT и DELETE обычно не обрабатываются параллельно, даже если связанный запрос соответствует критериям.

Но если операторы UPDATE или DELETE содержат предложение WHERE, или оператор INSERT содержит предложение SELECT, WHERE и SELECT могут выполняться параллельно. В этих случаях изменения применяются последовательно к базе данных.

Чтобы настроить параллельную обработку, просто выполните следующее:

  1. В диалоговом окне «Свойства сервера» перейдите на страницу «Дополнительно».
  2. По умолчанию параметр Макс. Степень параллелизма имеет значение 0, что означает, что максимальное количество процессоров, используемых для параллельной обработки, контролируется автоматически. По сути, SQL Server использует фактическое количество доступных процессоров в зависимости от рабочей нагрузки. Чтобы ограничить число процессоров, используемых для параллельной обработки, до заданного значения (до максимального значения, поддерживаемого SQL Server), измените значение параметра Максимальная степень параллелизма на значение, большее 1. Значение 1 указывает SQL Server не использовать параллельный интерфейс. обработка.
  3. Большие сложные запросы обычно могут выиграть от параллельного выполнения. Однако SQL Server выполняет параллельную обработку только в том случае, если предполагаемое количество секунд, необходимое для запуска последовательного плана для того же запроса, превышает значение, установленное в пороговом значении стоимости для параллелизма. Установите порог оценки стоимости с помощью поля Пороговое значение стоимости для параллелизма на странице Дополнительно диалогового окна Свойства сервера. Вы можете использовать любое значение от 0 до 32 767. На одном процессоре порог стоимости игнорируется.
  4. Нажмите ОК. Эти изменения применяются немедленно. Вам не нужно перезагружать сервер.

Вы можете использовать хранимую процедуру sp_configure для настройки параллельной обработки. Команды Transact-SQL:

exec sp_configure "max degree of parallelism", <integer value>
exec sp_configure "cost threshold for parallelism", <integer value>

Цитируется по статье Technet Настройка параллельной обработки в SQL Server 2008

0 голосов
/ 17 января 2014

TOP автоматически переводит запрос в последовательный (непараллельный режим). Это ограничение и не может быть преодолено. Попытайтесь использовать ранг, где значение rand = 1, в качестве возможной альтернативы функции TOP ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...