Параллелизм Best Practices

9

Каковы лучшие практики с установкой параллелизма в целом? Я знаю, что SQL Server по умолчанию 0использует все доступные процессоры, но в каком случае вы хотите изменить это поведение по умолчанию?

Я помню, как где-то читал (мне придется поискать эту статью), что для рабочих нагрузок OLTP вы должны отключить параллелизм (установите для maxdop значение 1). Я не думаю, что я полностью понимаю, почему вы это сделали.

Когда бы вы сохранили maxdop до SQL Server (0)? Когда вы отключите параллелизм (1)? Когда бы вы явно указали maxdop для определенного числа процессоров?

Что вызывает параллелизм?


источник

Ответы:

11

Вы обычно не хотите отключать параллелизм, поскольку это также отключит его для задач администратора. Лучше всего исправить запросы, которые вызывают параллелизм, путем добавления или исправления индексов или полного изменения схемы.


На основании ваших обновленных вопросов ...

Некоторые люди изменяют MAXDOP на 1 для приложений, созданных вендорами, потому что они не могут управлять базой данных или схемой и не хотят, чтобы один запрос занимал всю систему.

Лично я всегда держу MAXDOP на 0, за исключением некоторых редких случаев.

Параллелизм вызван одной операцией в плане выполнения, имеющей стоимость выполнения, которая превышает предварительно установленную настройку (порог стоимости для настройки параллелизма). Когда это происходит, SQL Server запускает параллелизм, чтобы он мог выполнять многопоточность запроса, пытаясь ускорить процесс. Значение по умолчанию для порогового значения стоимости для параллелизма равно 5. На многих платформах OLTP вы захотите увеличить его до 30 или 40, чтобы параллелизм включался только для действительно дорогих запросов.

mrdenny
источник
4

Я никогда не видел необходимости выключать или изменять какие-либо параметры параллелизма за все время работы с SQL Server (в прошлом тысячелетии, SQL Sever 6.5)

Исходя из ответа @StanleyJohns ...
OLTP-система с короткими острыми запросами никогда не должна превышать порог стоимости ( «порог стоимости для параллелизма» ), поэтому это не должно иметь значения. Если у вас есть несколько запросов, которые идут параллельно, то зачем вам ограничивать его, основываясь на чем-то недоказанном?

Я еще не видел чистой OLTP-системы тоже. В крайнем случае, может быть, есть, но в средней системе тоже есть отчеты; будь то внутри дня или на ночь. Эти запросы с большей вероятностью идут параллельно и извлекают из этого пользу.

С таким количеством доступных сегодня процессорных ядер, возможно, есть смысл установить глобальную «максимальную степень параллелизма», если вы можете измерить и заметить разницу.

Как я уже сказал, мое предложение - ничего не делать . Похоже на @mrdenny, но я бы добавил, что «нет чистой вещи в системе OLTP»

Говоря об этом, может быть, некоторое расстояние - это отключение многопоточных ядер на уровне BIOS, но это другой вопрос ...

Также, пожалуйста, смотрите

ГБН
источник
3

Что вызывает параллелизм ?: Есть настройка называется cost threshold for parallelism. После превышения этого порога используется параллелизм (если выполнены предварительные условия).

Природа OLTP-систем заключается в большом количестве быстрых и коротких транзакций. Использование параллелизма иногда увеличивает время обработки запроса, так как запрос будет разделен для параллельной обработки, а затем сшит обратно вместе перед возвратом. Следовательно, вы увидите предложения по установке maxdop на 1.

Одним из преимуществ установки maxdop на 1 является то, что параллелизм отключен по умолчанию, но вы можете включить его на уровне запроса, используя query hints.

Для систем хранилищ данных или OLAP-систем, в которых возвращаются большие наборы результатов, может быть полезным разделение запроса с использованием параллелизма. Это позволяет запросу использовать доступные ядра, чтобы сократить время обработки запроса.

StanleyJohns
источник
2

Я видел сложный запрос, разделенный на несколько процессов, выполнение которого занимает часы - обычно это можно увидеть в sp_who2 как несколько записей с одним и тем же spid.

Изменив его на maxdop 1, и запрос будет выполнен менее чем за минуту.

Урок здесь заключается в том, что двигатель не всегда понимает это правильно, когда дело доходит до параллелизма.

Джимбо
источник
0

У нас много серверов с 4 ядрами, а некоторые с 8 ядрами. Я рекомендую с таким небольшим количеством ядер, чтобы параллелизм (MAXDOP) был установлен на 1, чтобы избежать ожиданий на процессоре (а также проблем с таймаутом) для пользователей систем OLTP. Для OLAP или серверов отчетов с таким небольшим количеством ядер я рекомендую установить для MAXDOP значение 2, а для параметра Пороговое значение стоимости - 30 (это может быть выше или немного ниже для вашего сценария), чтобы только самые тяжелые запросы использовали параллелизм.

Тодд
источник