Блокировки в 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.
Таблица условно имеет четыре поля:
- ИД блокирующей сессии SPID;
- что именно заблокировано RES ID;
- тип блокировки — S,U или X MODE (на самом деле в MS SQL их 22 типа, однако в связки с 1С используется только три);
- состояние блокировки — может принимать значение GRANT (установлена) и WAIT (ожидает своей очереди).
KILL SPID
Таблица совместимости разных типов блокировок
S | U | X | |
S | + | + | — |
U | + | — | — |
X | — | — | — |
Где:
- S — разделяемая блокировка (чтения);
- U — блокировка обновления (установленная в запросе конструкцией «ДЛЯ ИЗМЕНЕНИЯ»);
- X — исключительная (эксклюзивная) блокировка (на запись).
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
СПРОСИТЕ в комментариях!
Евгений:
Добрый день.
Сдавал экзамен. Попался первый билет. На втором вопросе ответил что будет установлена разделяемая блокировка на сервере 1С. Преподаватель поставил минус, сказав, что разделяемых блокировок в 1С нет. Объясните, есть они или нет? как так вроде бы должны быть. или что имел ввиду преподаватель, когда это говорил?
Гейдар:
Все правильно, разделяемая блокировка на уровне СУБД, в 1с нет разделяемой есть совместная и исключительная в авто режиме- но это режимы блокировки
Евгений:
Но в книге Настольная книга Эксперта, на 50 странице написано же: «управляемые блокировки платформа ставит еще и сама: разделяемые — на время выполнения чтения…» Как тогда это понять? если ставит разделяемые, значит они есть?
Программист 1С:
Да, конечно есть.
Из СУБД блокировки никуда не деваются.
Андрей:
В 1С конечно же есть разделяемые блокировки, например они ставятся при выполнении метода набора записей НаборЗаписей.Прочитать()
Либо вы не поняли преподавателя, либо он не понял вас.
CMaker:
«…однако в связки с 1С используется только три»
А как же Range блокировки для регистров по крайней мере для СУБД MSSQL?
ivs2000:
смотрю системные базы данных MSSQL. база данных Мастер, среди таблиц нет таблицы syslockinfo.
gladluter:
Добрый день!
Подскажите как реализована пессимистическая блокировка? Я так понимаю она не связана с СУБД — «Физическая реализация блокировок в СУБД»?