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

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

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

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

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

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

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

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

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

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

Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>

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

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

Данный вид блокировок полностью реализован на уровне платформы 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 — исключительная (эксклюзивная) блокировка (на запись).

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

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

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

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

    Ответить

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

      Ответить

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

        Ответить

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

      Ответить

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

      Ответить

  2. «…однако в связки с 1С используется только три»

    А как же Range блокировки для регистров по крайней мере для СУБД MSSQL?

    Ответить

  3. смотрю системные базы данных MSSQL. база данных Мастер, среди таблиц нет таблицы syslockinfo.

    Ответить

  4. Добрый день!
    Подскажите как реализована пессимистическая блокировка? Я так понимаю она не связана с СУБД — «Физическая реализация блокировок в СУБД»?

    Ответить

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

Ваш адрес email не будет опубликован.