Эскалация блокировок 1С

Эскалация блокировок – это процесс оптимизации производительности сервера (СУБД или 1С), путем повышения гранулярности блокировок:

  • запись –> страница (KEY -> PAGE);
  • страница –> таблица (PAGE -> OBJECT);
  • таблица –> база данных (OBJECT -> DATA BASE).

В разных средах разные условия эскалации, а ее возникновение зависит от размера доступного объема оперативной памяти и количества заблокированных ресурсов низкой гранулярности. В совокупности этих факторов, сервер принимает решение об эскалации.

Эскалация блокировок 1С

На сервере 1С условия зависят от версии платформы:

  • Версия 8.2 – более 20 000 записей объекта метаданных;
  • Версия 8.3 – более 100 000 записей объекта метаданных.

Эскалация блокировок MS SQL

Для СУБД MS SQL при блокировке одной транзакцией более 5000 тысяч срок, может возникнуть эскалация, при выполнении других факторов, которые зависят от настроек сервера.

Курс 1С: Эксперт. Эскалация блокировок MS SQL

Эскалация блокировок PostgreSQL

Начиная с версии 10, в PostgreSQL появилась возможность настраивать условия возникновения эскалаций. Доступные параметры для настройки:

  • max_pred_locks_per_page – количество записей на одну страницу, после которого, уровень блокировки поднимается до страницы. Другими словами, вместо max_pred_locks_per_page записей о блокировках, будет одна запись о том, что заблокирована вся страница, включая и избыточные записи, которые нам не надо блокировать.
  • max_pred_locks_per_relation – количество записей в таблице, после которого, уровень блокировки поднимается до таблицы. Другими словами, вместо max_pred_locks_per_relation записей о блокировках или (max_pred_locks_per_relation / кол_записей_на_странице страницах), будет одна запись о том, что заблокирована вся таблица, включая и избыточные записи, которые нам не надо блокировать.
  • Если количество блокировок будет более чем max_pred_locks_per_transaction × max_connections, то возникнет ошибка или эскалация (при возможности) перейдет на базу данных, т.е. в монопольный доступ.

Плюсы и минусы эскалации блокировок

Эскалация блокировок – это положительное явления для сервера приложений (1С или СУБД), т.к. значительно снижается нагрузка на управление механизмом блокировок.

Но в это же время, приводит к избыточным блокировкам, что в свою очередь приводит к ожиданиям на блокировках в нагруженных системах.

Причины возникновения эскалации блокировок

Основными виновниками являются неоптимальные запросы, которые приводят к блокировкам не нужных нам ресурсов. В частности, вместо поиска по индексу 10 строк и соответственно блокировки 10 строк, выполняется полное сканирование таблицы кластерного индекса, что приводит к увеличению количества заблокированных строк, и как следствие к эскалации на всю таблицу.

Курс 1С: Эксперт. Эскалация блокировок Итоги

 

Очевидно, что если заблокирована вся таблица с данными, то никто другой (другие транзакции = сеансы/пользователи) работать с этой таблицей не смогут (при уровне изоляции транзакций REPEATABLE READ).

Данная тема подробнее рассматривается в пакете видео-курса «Секреты 1С: Эксперта» Шаг 3. Занятие 09-03 Взаимоблокировки..
Константин Ефимов | 1С: Эксперт. Приланс. Бали.

КОНСТАНТИН ЕФИМОВ
Комментарии и вопросы