Що таке ескалація блокування?


47

Мені було задано це питання на інтерв'ю, і відповіді не було. Хтось може тут пояснити?

Відповіді:


45

Блокування БД може існувати на рядках, сторінках або цілих таблицях або індексах. Коли транзакція проводиться, блоки, утримувані транзакцією, займають ресурси. Ескалація блокування полягає в тому, що система консолідує декілька замків на один вищий рівень (наприклад, консолідуючи кілька блоків рядків на сторінці або декілька сторінок у цілу таблицю), як правило, для відновлення ресурсів, зайнятих великою кількістю дрібнозернистих замків.

Це зробить це автоматично, хоча ви можете встановити прапорці на таблицях (див. ALTER TABLE у книгах on-line), щоб контролювати політику ескалації блокування у цій конкретній таблиці. Зокрема, передчасна або надто охоча ескалація блокування була проблемою для старих версій Sybase та SQL Server, коли у вас два процеси одночасно писали окремі рядки на одну і ту ж сторінку. Якщо ви повернетесь досить далеко (IIRC SQL Server 6.5), SQL Server насправді не мав блокування рядків, а міг блокувати лише таблиці чи сторінки. Де це сталося, ви можете отримати суперечки між вставками записів на одній сторінці; часто ви кладете кластерний індекс на стіл, щоб нові вставки переходили на різні сторінки.


3
Слід також зазначити, що ми не маємо контролю над тим, коли сервер наростає.

Ми робимо зараз. Це дзвінок T1211.
Джошуа

@Joshua, прапор сліду 1211 використовується для відключення ескалації блокування. Немає в нас можливості сказати SQL Server ескалації в певний час.
Просто учень

10
Блокування рядків не ескальовано до блоків сторінки, а безпосередньо до блоків таблиці.
Маной Пандей

Це правда, про що заявив Маной. Ви повинні виправити цю частину у своїй відповіді, щоб не вводити в оману менш досвідчених користувачів SQL Server
NikolaD

20

Це метод зменшення накладних витрат системи шляхом перетворення безлічі дрібнозернистих замків на менше грубозернистих. Більш детальну інформацію можна знайти тут і тут .

Наприклад, якщо у вас є багато (як правило, сотень і більше) блокувань на конкретних рядках у таблиці, як тільки ви перевищите максимально дозволену кількість блокувань, вони можуть бути замінені на замок у всій таблиці.


11

SQL Server робить Lock Escalation , щоб зменшити накладні витрати , перетворивши кілька дрібнозернистих замків низького рівня в грубозернисті блоки високого рівня.

  • Блокування рядків завжди переходить до столових блоків та
  • Блокування сторінок також переходить до столових блоків.

Це міф , що Блокування рядків ескалація блокування сторінок , то ж саме , згадані вище, @ConcernedOfTunbridgeWells неправильно.

Якщо таблиця містить дуже мало оновлень рядків, SQL-механізм спробує взяти Row-Locks на цих рядках або Page-Lock на цих Сторінках. Скажімо, це взяло Row-Lock. Але якщо рядкові оновлення збільшують поріг (~ 5k блокування), то замість того, щоб брати декілька рядків-блокувань, потрібен один Table-Lock. Таким чином, це зменшує накладні витрати на пам'ять, вивільняючи кілька рядків-блокувань і приймаючи один Table-Lock, але збільшує одночасність. Те саме відбувається з блокуванням сторінки.

Поріг Укрупнення блокування знаходиться на- крайней мере , 5000 замків, і залежить від декількох факторів, докладне пояснення ескалація блокувань було згадано тут в MSDN Бол: https://technet.microsoft.com/en-us/library/ms184286(v = sql.105) .aspx


5

Ескалація блокування означає перетворення блокування в більш обмежений режим. Найчастіше це спостерігається в базах даних. У запиті може бути заблокований ресурс для "спільного доступу" та перехід його до "ексклюзивного" для оновлення.

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