Різниця між рівнем рядка та блокуванням рівня сторінки та наслідками


10

При спробі запустити мій план технічного обслуговування я отримую таку помилку:

Не вдалося виконати запит "" із такою помилкою: "Індекс" "(розділ 1) таблиці" "неможливо переорганізувати, оскільки блокування рівня сторінки вимкнено."

На даний момент у цьому індексі увімкнено блокування рівня рядків. Я можу ввімкнути блокування рівня сторінки, але я не впевнений, що це за наслідки.

Моє запитання: Яка різниця між двома схемами блокування та якими є їх реальні наслідки (у виробництві)?

Відповіді:


14

Не вдалося виконати запит "" із такою помилкою: "Індекс" "(розділ 1) таблиці" "неможливо переорганізувати, оскільки блокування рівня сторінки вимкнено."

План технічного обслуговування повинен робити спроби ALTER INDEX REORGANIZE, що є операцією в Інтернеті. Щоб видалити фрагментацію (сторінки не в порядку), сторінки потрібно заблокувати та перемістити, що неможливо, якщо блокування сторінок було вимкнено. Єдиний спосіб дефрагментації без блокування сторінок - це блокування всього розділу, що неможливо лише REORGANIZE як його онлайн.

Яка різниця між двома блокувальними схемами та якими є їх реальні наслідки (у виробництві)?

Вам потрібно зрозуміти, що таке запис та сторінка, щоб оцінити вплив заборони певного типу блокування. Якщо ви не знайомі із внутрішніми сховищами SQL Server, починайте з « Анатомія запису та анатомія сторінки» . Поставте дуже просто:

  • рядки = записи
  • рядки зберігаються на сторінках 8 кб

Якщо ви повинні змінити дозволені типи блокування:

  • Вимкнути блокування сторінок = Блокування рядків і таблиць
  • Вимкнути блокування рядків = Блокування сторінок і таблиць
  • Вимкнути обидва = Блокування лише таблиць

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

Таблиця пошуку, яка часто доступна, яка нечасто змінюється. Відключивши блокування сторінок та рівнів, усі читачі приймуть загальну блокування таблиці. Це швидше / дешевше, ніж звичайне спільне використання намірів на столі, після чого - спільне використання намірів на сторінці та, нарешті, загальний замок у певному рядку чи рядках.

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

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

За замовчуванням увімкнено обидва, і це не повинно бути змінено без поважної причини.


9

Напевно, нічого. Я впевнений, що MS знає краще, ніж ти чи я

Я працював над системами OLTP з високою гучністю і ніколи не відчував потреби змінювати налаштування. Тупик слід повторити, оскільки вони все одно відбудуться

Цитуючи з блогу SQL Server Storage Engine, "Ескалація блокування в SQL2005", яку варто прочитати повністю.

За замовчуванням у нас увімкнено блокування ROW та PAGE ... У більшості випадків SQL Server вибирає деталізацію блокування ROW, але, можливо, може вибрати блокування PAGE. Отже, для вказаного вами випадку блокування ROW є ймовірним. Немає можливості вимкнути блокування PAGE на рівні бази даних чи примірника. У вас виникає блокування через блокування PAGE?

Я вважаю, що якщо ви змушуєте виходити на заваду лише тоді, ви будете споживати ресурси, які можна було б ефективніше використовувати в інших місцях. Якщо ваше навантаження досить велике, що має значення, то навіщо споживати пам'ять? Стаття в блозі йде в це

Я підозрюю, що за цим стоїть деякий забобон, як і такі:


+1, але: тупики в системах OLTP можна запобігти; моя система працює без тупиків місяцями, хоча ми розгортаємось 2-3 рази на тиждень.
АК
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.