Подтвердить что ты не робот

Какова цель использования OPTION (MAXDOP 1) в SQL Server?

Я никогда не понимал использование MAXDOP. Я знаю, что он делает запрос быстрее и что это последний элемент, который я могу использовать для оптимизации запросов.

Однако, мой вопрос: когда и где он лучше всего подходит для использования в запросе?

4b9b3361

Ответ 1

Как упоминалось в Kaboing, MAXDOP(n) фактически контролирует количество ядер процессора, которые используются в процессоре запросов.

В полностью незанятой системе SQL Server попытается как можно быстрее вывести таблицы в память и объединить их в памяти. Может быть, в вашем случае лучше всего сделать это с помощью одного процессора. Это может иметь тот же эффект, что и при использовании OPTION (FORCE ORDER), который заставляет оптимизатор запросов использовать порядок объединений, который вы указали. В некоторых случаях я видел OPTION (FORCE PLAN) сокращение запроса от 26 секунд до 1 секунды времени выполнения.

В онлайн-книгах говорится, что возможные значения для MAXDOP:

0 - Использует фактическое количество доступных ЦП в зависимости от текущей рабочей нагрузки системы. Это значение по умолчанию и рекомендуемая настройка.

1 - Подавляет генерацию параллельного плана. Операция будет выполняться серийно.

2-64 - Ограничивает количество процессоров до указанного значения. В зависимости от текущей рабочей нагрузки может использоваться меньшее количество процессоров. Если указано значение, большее количества доступных ЦП, используется фактическое количество доступных ЦП.

Я не уверен, что самое лучшее использование MAXDOP, однако я бы предположил и скажу, что если у вас есть таблица с 8 разделами, вам нужно указать MAXDOP(8) из-за ввода /O, но я мог ошибаться.

Вот несколько быстрых ссылок, которые я нашел о MAXDOP:

Электронная книга: Степень Parallelism

Общие рекомендации по настройке опции MAXDOP

Ответ 2

Это общий чередование на Parallelism в SQL Server, это может не отвечать на ваш вопрос напрямую.

Из книг в Интернете, на MAXDOP:

Устанавливает максимальное количество процессоров процессор запросов может использовать для выполнения один индексный оператор. Меньшее процессоры могут использоваться в зависимости от текущая рабочая нагрузка системы.

Смотрите блог Рикки Ли в Parallelism и тип ожидания CXPACKET. Это довольно интересно.

Как правило, в базе данных OLTP я считаю, что если запрос является настолько дорогостоящим, его необходимо выполнить на нескольких процессорах, запрос нужно переписать в нечто более эффективное.

Почему вы получаете лучшие результаты, добавляя MAXDOP (1)? Трудно сказать без фактических планов выполнения, но это может быть так просто, что план выполнения полностью отличается от того, что без OPTION, например, с использованием другого индекса (или, скорее,) JOINING по-разному, используя соединения MERGE или HASH.

Ответ 4

В SQL-сервере есть пара ошибок при сбое с аномальным вводом. ВАРИАНТ (MAXDOP 1) будет обходить их.

EDIT: Старый. Мое тестирование было сделано в основном на SQL 2005. Большинство из них, похоже, больше не существует, но каждый раз в некоторое время мы ставим под сомнение предположение, что SQL 2014 делает что-то немое, и мы возвращаемся к старому способу, и он работает. Нам никогда не удавалось продемонстрировать, что это было не просто плохое создание плана в более поздних случаях, хотя, поскольку SQL Server можно полагаться, чтобы получить старый путь в новых версиях. Поскольку все случаи были связаны с IO-запросами, MAXDOP 1 не повредит.

Ответ 5

Добавление двух центов, основанных на проблеме производительности, которую я наблюдал.

Если простые запросы становятся ненужными, они могут принести больше проблем, чем решить их. Тем не менее, перед добавлением MAXDOP в запрос как исправление "колено-рывок", необходимо проверить некоторые параметры сервера.

В Иеремия Песшка - Пять настроек SQL Server для изменения, MAXDOP и "COST THRESHOLD FOR PARALLELISM" (CTFP) являются как важные настройки для проверки.

Примечание. Paul White упомянул max server memory как параметр для проверки в ответ на Ошибка производительности после перехода с SQL Server 2005 на 2012. Хорошая статья kb для чтения - Использование больших объемов памяти может привести к неэффективному плану в SQL Server

Jonathan Kehayias - порог стоимости настройки для parallelism из кэша Plan помогает найти хорошее значение для CTFP.

Почему порог стоимости для parallelism игнорируется?

Аарон Бертран - Шесть причин, по которым вы должны волноваться о parallelism, обсуждают какой-то сценарий, где MAXDOP является решением.

Parallelism -Ингибирующие компоненты упоминаются в Пол Уайт - принудительный параллельный процесс выполнения запросов