Закажите бесплатный расчет стоимости вашей задачи по 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С конечно же есть разделяемые блокировки, например они ставятся при выполнении метода набора записей НаборЗаписей.Прочитать()
      Либо вы не поняли преподавателя, либо он не понял вас.

      Ответить

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *


*