Паралелізм Кращі практики


9

Які найкращі практики щодо встановлення паралелізму взагалі? Я знаю, що SQL Server за замовчуванням 0використовує всі доступні процесори, але в якому випадку ви хочете змінити цю поведінку за замовчуванням?

Я пам’ятаю, що десь читав (мені доведеться шукати цю статтю), що для навантажень OLTP слід вимкнути паралелізм (встановити maxdop на 1). Я не думаю, що я повністю розумію, чому ти це зробиш.

Коли ви продовжите maxdop до SQL Server (0)? Коли ви відключите паралелізм (1)? Коли ви б чітко вказали maxdop для певної кількості процесорів?

Що викликає паралелізм?

Відповіді:


11

Зазвичай ви не хочете відключати паралелізм, оскільки це також відключить його для завдань адміністратора. Ваша найкраща ставка - виправити запити, які викликають паралелізм, шляхом додавання чи фіксації індексів або повного внесення змін до схеми.


На основі ваших оновлених питань ...

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

Особисто я завжди тримаю MAXDOP на 0, за винятком деяких рідкісних випадків.

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


4

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

Після відповіді від @StanleyJohns ...
Система OLTP з короткими, різкими запитами ніколи не повинна перевищувати поріг вартості ( "поріг вартості для паралелізму" ), тому це не має значення. Якщо у вас є запити, які йдуть паралельно, то чому б ви обмежили його на основі чогось недоказуваного

Я ще не бачив чистої системи OLTP. У крайньому випадку, можливо, є, але середня система теж має звіт про це; будь то протягом доби або протягом ночі. Ці запити скоріше йдуть паралельно і отримують користь від цього.

Маючи так багато ядер CPU, які сьогодні доступні, можливо, існує можливість встановити глобальний "максимальний ступінь паралелізму", якщо ви можете виміряти та помітити різницю.

Як я вже сказав, моя пропозиція - нічого не робити . Подібно до @mrdenny, але я б включив "немає такої речі, як чиста система OLTP"

Сказавши, що може бути певний пробіг - це відключення гіперточених ядер на рівні BIOS, але це вже інше питання ...

Також див


3

Що викликає паралелізм ?: Існує параметр, який називається cost threshold for parallelism. Після перевищення цього порогу застосовується паралелізм (якщо умови виконуються).

Природа OLTP-систем полягає у великій кількості швидких та коротких транзакцій. Використання паралелізму іноді збільшує час обробки запиту, оскільки запит буде розділений на паралельну обробку, а потім зшитий разом перед поверненням. Отже, ви побачите пропозиції встановити maxdop на 1.

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

Для систем сховища даних або систем OLAP, де повертаються великі набори результатів, може бути користь для розділення запиту за допомогою паралелізму. Це дозволяє запиту використовувати наявні ядра, щоб скоротити час обробки запиту.


2

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

Змінивши його на maxdop 1 і запит виконано менше ніж за хвилину.

Урок тут полягає в тому, що двигун не завжди справляється, коли йдеться про паралелізм.


0

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.