Как упоминалось в Kaboing, MAXDOP(n)
фактически контролирует количество ядер процессора, которые используются в процессоре запросов.
В полностью незанятой системе SQL Server попытается как можно быстрее вытащить таблицы в память и объединить их в памяти. Может быть, в вашем случае лучше всего сделать это с помощью одного процессора. Это может иметь такой же эффект, как использование OPTION (FORCE ORDER)
, что заставляет оптимизатор запросов использовать порядок объединений, который вы указали. В некоторых случаях я видел, что OPTION (FORCE PLAN)
уменьшает запрос с 26 секунд до 1 секунды времени выполнения.
Книги Интернет продолжает говорить, что возможные значения для MAXDOP
являются:
0 - использует реальное число доступных процессоров в зависимости от текущей рабочей нагрузки системы. Это значение по умолчанию и рекомендуемая настройка.
1 - Подавляет генерацию параллельного плана. Операция будет выполняться последовательно.
2-64 - Ограничивает количество процессоров до указанного значения. В зависимости от текущей рабочей нагрузки может использоваться меньшее количество процессоров. Если указано значение, большее количества доступных ЦП, используется фактическое количество доступных ЦП.
Я не уверен, что лучшее использование MAXDOP
, однако я хотел бы сделать предположение и сказать, что если у вас есть таблица с 8 разделами на нем, вы хотели бы указать MAXDOP(8)
из-за ввод/вывод ограничения, но я мог ошибаться.
Вот несколько быстрых ссылок, которые я нашел около MAXDOP
:
Books Online: Degree of Parallelism
General guidelines to use to configure the MAXDOP option
Вы должны включать в себя версию и пакет обновления сервера SQL. Возможно, это было исправлено в более поздней версии ... – 2008-12-19 02:54:07