При записи и удалении данных в сеансе с неиспользуемыми разделителями, управляемая блокировка устанавливается не только по ссылке и явно указанным полям, но и по общим реквизитам, являющимися разделителями, в состав которых входит записываемый или удаляемый объект.
Реализована возможность использования общих реквизитов, не являющихся разделителями, в свойстве объекта конфигурации ПоляБлокировкиДанных.
Общие реквизиты, которые являются разделителями в режиме Независимо и совместно, не могут быть выбраны в список реквизитов ПоляБлокировкиДанных. Реализована возможность указывать такие реквизиты в качестве имени пространства блокировок объекта БлокировкаДанных. Система вызовет исключение в том случае, если в объекте БлокировкаДанныхиспользуется значение разделителя, отличное от значения, используемого в сеансе.
Изменения реализованы для следующих объектов:
- Справочники;
- Документы;
- Планы видов характеристик;
- Планы счетов;
- Планы видов расчета;
- Планы обмена;
- Бизнес-процессы;
- Задачи;
- Константы.
Исключена возможность устанавливать управляемые транзакционные блокировки (свойство ПоляБлокировкиДанных) по реквизитам объектов следующих типов: строка неограниченной длины, хранилище значений, тип значения характеристики, составные типы, включающие в себя какие-либо из вышеперечисленных типов.
При проверке конфигурации выполняется контроль полей, указанных в списке полей блокировки данных и выдается ошибка, если какое-либо из полей не соответствует ограничениям.
Для сервера «1С:Предприятия» реализованы лицензии с ограниченным количеством одновременно обслуживаемых сеансов клиентских приложений — МИНИ-СЕРВЕР на 5 подключений.
Сценарий, который заставил меня задуматься, следующий.
Предположим, что мы работаем со справочником «Товары». В Транзакция № 1 мы устанавливаем явную исключительную управляемую блокировку на элемент «Товар 1» по ссылке. В это же время в транзакции № 2 мы пытаемся установить исключительную управляемую блокировку, но по наименованию «Товар 1» и становимся в ожидание.
Вопрос: откуда платформа узнает, что заблокированный элемент в первой транзакции имеет наименование «Товар 1», мы же установили блокировку только по ссылке? Я сделал предположение, что должно быть дополнительное обращение к СУБД. Профайлер таковых не обнаружил. Но ожидание-то есть.
Возникла мысль: а что, если в транзакции № 2 попытаться установить блокировку по другому наименованию, например «Такого названия нет»? Результат –транзакция становится в ожидание.
Таким образом, установка блокировок на разные поля не имеет смысла. В моем примере в транзакции №2 платформа обнаруживает, что в пространстве «Справочник.Товары» установлена блокировка по ссылке, но наименование элемента с такой ссылкой она не знает, поэтому принимает решение не устанавливать блокировку и ставит транзакцию в ожидание.
Кстати, при записи элемента, платформа устанавливает неявную управляемую блокировку как на ссылку, так и на все поля, указанные в свойстве «Поля блокировки данных» (строго в соответствии с документацией). В этом случае, если наименование записываемого элемента не совпадает с наименованием, по которому транзакция № 2 пытается установить блокировку, то конфликта не будет.
Вот выдержка из технологического журнала, отлавливались события « TLOCK ».
Locks=’Reference9.REFLOCK Exclusive Description=» Такого названия нет «‘,
Блокировка по ссылке и наименованию при записи элемента справочника:
Locks=’Reference9.REFLOCK Exclusive Description=» Малый » >
Сегодня речь пойдет о блокировках как на уровне 1С 8.3 и 8.2, так и на уровне СУБД. Блокировка данных — обязательный элемент любой системы, количество пользователей в которой больше одного.
Ниже я распишу, как работают блокировки, и каких типов они бывают.
Блокировка — это информация о том, что ресурс системы захвачен другим пользователем. Бытует мнение, что блокировка — это ошибка. Нет, блокировка — это неизбежная мера в многопользовательской системе для разделения ресурсов.
Вред системе могут принести только избыточные («лишние») блокировки, это те блокировки, которые блокируют лишнюю информацию. Такие блокировки необходимо научиться устранять, они могут привести к неоптимальной работе системы.
Содержание
- Типы блокировок 1С
- Объектные блокировки 1С
- Пессимистические блокировки
- Оптимистические блокировки
- Транзакционные блокировки 1С
- Автоматические транзакционные блокировки 1С и СУБД
- Управляемые режим транзакционных блокировок 1С и СУБД
- Физическая реализация блокировок в СУБД
- Таблица совместимости разных типов блокировок
Типы блокировок 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.
Таблица условно имеет четыре поля:
- ИД блокирующей сессии SPID;
- что именно заблокировано RES ID;
- тип блокировки — S,U или XMODE (на самом деле в MS SQL их 22 типа, однако в связки с 1С используется только три);
- состояние блокировки — может принимать значение GRANT (установлена) и WAIT (ожидает своей очереди).
Таблица совместимости разных типов блокировок
- S — разделяемая блокировка (чтения);
- U — блокировка обновления (установленная в запросе конструкцией «ДЛЯ ИЗМЕНЕНИЯ»);
- X — исключительная (эксклюзивная) блокировка (на запись).
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
Источник: