Рівень блокування може розповсюджуватися на: ??запис (для операцій insert); ??сторінку - 2-кілобайтний фрагмент даних або індексів; ??розширення (extent) - 8 послідовних сторінок, використовується при розміщенні або вивільняється сторінок (наприклад, в командах create/drop або коли операція вставки insert вимагає виділення нових сторінок???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????її можна задіювати командою sp_tableoption <Имя таблиці або шаблон>, 'insert row lock', 'true'. Існує діалектична суперечність, з якою напевно стикався кожний адміністратор бази даних або розробник. З одного боку, хочеться зменшити до мінімуму вірогідність зіткнення інтересів користувачів при доступі до одних і тих же ресурсів і тому блокувати все на якомога більш детальному рівні. З іншою - дуже не хочеться перенавантажувати менеджер блокувань, який фіксує інформацію про те, хто наклав блокування, якого типу, хто чекає, поки вона звільниться і т.д. Наприклад, в MS SQL Server 6.5 кожне блокування обходиться в 32 байти. Для дозволу цієї суперечності сервер уміє автоматично підвищувати рівень блокування у випадку, якщо блокувань попереднього рівня деталізації стає дуже багато (lock escalation). "Дуже багато" - це LE Threshold Maximum в настройках конфігурації серверу, тобто максимальна порогова величина числа сторінкових блокувань, досягши якої відбувається ескалація до рівня таблиці. За умовчанням вона рівна 200. Для цих же цілей використовується настройка LE Threshold Percentage - у відносному виразі до розміру таблиці (але не менше ніж LE Threshold Minimum, що корисне для невеликих таблиць). В перспективі можлива зворотна стратегія динамічної де ескалації рівня блокування, коли блокується явно більший фрагмент даних, чим потрібен, але, як тільки з'являється транзакція, що конкурує за дані усередині даного фрагмента, рівень першої транзакції буде автоматично зменшений. Управління рівнем ізоляції транзакцій впродовж всього з'єднання (призначеної для користувача сесії) здійснюється за допомогою установки set transaction isolation level <уровень изоляции>, де рівень ізоляції може приймати значення: uncommitted відповідає рівню ізоляції 0 стандарту ANSI, тобто просто забороняє різним транзакціям змінювати одні і ті ж дані в один і той же час, але допускає брудне і не повторюється читання і фантоми; committed (встановлюється за умовчанням) відповідає рівню ізоляції 1 стандарту ANSI, тобто запобігає брудному читанню; repeatable read або serializable відповідає рівню 3 за стандартом ANSI - запобігає брудному читанню, а також гарантує, що два оператори select в різних місцях однієї транзакції повертатимуть однаковий результат, тобто виключає читання і фантоми, що не повторюється. Останній, найнадійніший рівень захисту транзакцій є самим неоптимальним з погляду швидкодії, оскільки за все доводиться платити. Для більш гнучкого управління рівнем ізоляції для кожного оператора select може явно задаватися опція настройки; nolock те ж, що read uncommitted, - дає можливість читання брудних (ще не зафіксованих) даних, яка перекриває аналогічні параметри конфігурації призначеної для користувача сесії. В операторі select можна також звести наклеп тривалості блокування даних; holdlock інструктує сервер тримати блокування до завершення транзакції (за умовчанням блокування знімаються зразу ж після прочитання необхідних даних; Тип і рівень блокування: updlock примушує застосувати блокування update замість