Published on

June 8, 2017

Понимание блокировки и эскалации блокировки в SQL Server

Блокировка является важным аспектом обработки транзакций SQL Server, обеспечивающим целостность данных в многопользовательской среде. Она позволяет SQL Server эффективно управлять конкурентностью транзакций. Блокировки – это структуры в памяти, которые защищают ресурсы и обеспечивают выполнение теста ACID для транзакций.

Тест ACID состоит из четырех требований:

  • Атомарность: Транзакция должна либо подтвердить все части информации, либо ни одну.
  • Согласованность: Транзакция должна создать допустимое состояние новых данных или откатиться к предыдущему состоянию.
  • Изоляция: Запущенная транзакция должна оставаться изолированной от других транзакций до тех пор, пока она не подтвердит все данные.
  • Надежность: Подтвержденные данные должны быть сохранены таким образом, чтобы сохранить их целостность, даже в случае сбоя.

Блокировка SQL Server обеспечивает выполнение требования изоляции путем блокировки объектов, затронутых транзакцией. Когда объект заблокирован, другим транзакциям запрещается вносить изменения в заблокированные данные. После освобождения блокировки другие транзакции могут вносить необходимые изменения.

SQL Server предлагает различные режимы блокировки:

  • Исключительная (X): Обеспечивает исключительный доступ к странице или строке для изменения данных.
  • Общая (S): Резервирует страницу или строку для чтения, позволяя нескольким транзакциям совместно использовать доступ для чтения.
  • Обновление (U): Аналогично исключительной блокировке, но более гибкое, позволяющее совместное использование блокировок на уже заблокированных записях с блокировкой обновления.
  • Намерение (I): Информирует другие транзакции о намерении получить блокировку на объекте более высокого уровня иерархии.
  • Схема (Sch): Используется для модификации и стабильности схемы.
  • Массовое обновление (BU): Используется для операций массового импорта.

SQL Server следует иерархии блокировки, начиная с уровня базы данных и до уровня строки. Эскалация блокировки происходит, когда на одном уровне получается более 5000 блокировок. По умолчанию SQL Server переходит к блокировке на уровне таблицы, что снижает использование ресурсов, но потенциально увеличивает конкурентность.

Для контроля эскалации блокировки можно использовать опцию LOCK_ESCALATION с оператором ALTER TABLE. Варианты: TABLE (по умолчанию), AUTO и DISABLE. При использовании опции AUTO необходимо проявлять осторожность, чтобы избежать взаимоблокировок.

Для просмотра активных блокировок SQL Server можно использовать динамическое представление управления блокировками sys.dm_tran_locks. Оно предоставляет информацию о ресурсах менеджера блокировок, используемых в настоящее время.

Понимание блокировки и эскалации блокировки в SQL Server является важным для оптимизации обработки транзакций и обеспечения целостности данных в многопользовательской среде.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.