Закажите бесплатный расчет стоимости вашей задачи по 1С!
Перезвоним за 10 минут!

Блокировки в 1С и СУБД

Сегодня речь пойдет о блокировках как на уровне 1С 8.3 и 8.2, так и на уровне СУБД. Блокировка данных — обязательный элемент любой системы, количество пользователей в которой больше одного.

Ниже я распишу, как работают блокировки, и каких типов они бывают.

Время ожидания блокировки истекло

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

Вред системе могут принести только избыточные («лишние») блокировки, это те блокировки, которые блокируют лишнюю информацию. Такие блокировки необходимо научиться устранять, они могут привести к неоптимальной работе системы.

Типы блокировок 1С

Типы блокировок

Блокировки в 1С делятся условно на объектные и транзакционные.

Объектные бывают, в свою очередь, оптимистическими и пессимистическими. А транзакционные можно разделить на управляемые и автоматические.

Объектные блокировки 1С

Данный вид блокировок полностью реализован на уровне платформы 1С и никак не затрагивает СУБД.

Получите 267 видеоуроков по 1С бесплатно:

Пессимистические блокировки

Эта блокировка срабатывает, когда один пользователь что-то изменил в форме справочника, а второй пытается так же изменить объект в форме.

Оптимистические блокировки

Данная блокировка сравнивает версии объекта: если два пользователя открыли форму, и один из них изменил и записал объект, то второму при записи система выдаст ошибку, что версии объектов отличаются.

Транзакционные блокировки 1С

Механизм тразакционных блокировок 1С гораздо интереснее и более функционален, чем механизм объектных блокировок. В этом механизме активно участвуют блокировки на уровне СУБД.

Неверная работа транзакционных блокировок может привести с следующим проблемам:

  • проблема потерянного изменения;
  • проблема грязного чтения;
  • неповторяемость чтения;
  • чтение фантомов.

Подробно эти проблемы были рассмотрены в статье об уровнях изоляции транзакции.

Автоматические транзакционные блокировки 1С и СУБД

В автоматическом режиме работы за блокировки целиком и полностью отвечает СУБД. Разработчик в данном случае абсолютно не участвует в процессе. Это облегчает труд программиста 1С, однако создание информационной системы для большого количества пользователей на автоматических блокировках нежелательно (особенно для СУБД PostgreSQL, Oracle BD — при модификации данных они полностью блокируют таблицу).

Для разных СУБД в автоматическом режиме используются разные степени изоляции:

  • SERIALIZABLE на всю таблицу – файловый режим 1С, PostgreSQL, Oracle;
  • SERIALIZABLE на записи – MS SQL, IBM DB2 при работе с не объектными сущностями;
  • REPEATABLE READ на записи – MS SQL, IBM DB2 при работе с объектными сущностями.

Управляемые режим транзакционных блокировок 1С и СУБД

В режиме управляемых блокировок всю ответственность на себя берет разработчик прикладного решения на уровне 1С. При этом СУБД устанавливает достаточно высокий уровень изоляции для транзакций — READ COMMITED (SERIALIZABLE для файловой СУБД).

При выполнении любой операции с БД менеджер блокировок 1С анализирует возможность блокировки (захвата) ресурса. Блокировки одного и того же пользователя всегда совместимы.

Две блокировки НЕ совместимы, если: установлены разными пользователями, имеют несовместимые виды (исключительная/разделяемая) и установлены на один и тот же ресурс.

Физическая реализация блокировок в СУБД

Физически блокировки представляют собой таблицу, которая находится в БД под названием master. Сама таблица блокировок носит имя syslockinfo.

Таблица условно имеет четыре поля:

  1. ИД блокирующей сессии SPID;
  2. что именно заблокировано RES ID;
  3. тип блокировки  — S,U или X MODE (на самом деле в MS SQL их 22 типа, однако  в связки с 1С используется только три);
  4. состояние блокировки — может принимать значение GRANT (установлена) и WAIT (ожидает своей очереди).
Для завершения транзакции на уровне SQL можно использовать команду KILL с указанием идентификатора сессии:
KILL SPID

Таблица совместимости разных типов блокировок

S U X
S + +
U +
X

Где:

  • S — разделяемая блокировка (чтения);
  • U — блокировка обновления (установленная в запросе конструкцией «ДЛЯ ИЗМЕНЕНИЯ»);
  • X — исключительная (эксклюзивная) блокировка (на запись).

P.S. Наша компания предоставляет услуги по настройке, доработке и комплексному внедрению 1С. Закажите бесплатный расчет стоимости вашей задачи на странице Услуги 1С или по телефону +7 (499) 350 29 00.

Остались вопросы?

СПРОСИТЕ в комментариях!

Комментариев: 5 на “Блокировки в 1С и СУБД
  1. Добрый день.
    Сдавал экзамен. Попался первый билет. На втором вопросе ответил что будет установлена разделяемая блокировка на сервере 1С. Преподаватель поставил минус, сказав, что разделяемых блокировок в 1С нет. Объясните, есть они или нет? как так вроде бы должны быть. или что имел ввиду преподаватель, когда это говорил?

    Ответить

    • Все правильно, разделяемая блокировка на уровне СУБД, в 1с нет разделяемой есть совместная и исключительная в авто режиме- но это режимы блокировки

      Ответить

      • Но в книге Настольная книга Эксперта, на 50 странице написано же: «управляемые блокировки платформа ставит еще и сама: разделяемые — на время выполнения чтения…» Как тогда это понять? если ставит разделяемые, значит они есть?

        Ответить

    • Да, конечно есть.
      Из СУБД блокировки никуда не деваются.

      Ответить

    • В 1С конечно же есть разделяемые блокировки, например они ставятся при выполнении метода набора записей НаборЗаписей.Прочитать()
      Либо вы не поняли преподавателя, либо он не понял вас.

      Ответить

Добавить комментарий: