Каталог решений - Управляемые блокировки по полям из свойства "Поля блокировки данных"

Управляемые блокировки по полям из свойства "Поля блокировки данных"

Управляемые блокировки по полям из свойства "Поля блокировки данных"

В наличии

Добрый день, коллеги!
Хотелось бы поделиться обнаруженной особенностью работы механизма управляемых блокировок, а именно блокировке по полям, указанным в свойстве «Поля блокировки данных».

Категория:

Описание

Сценарий, который заставил меня задуматься, следующий.

Предположим, что мы работаем со справочником «Товары». В Транзакция № 1 мы устанавливаем явную исключительную управляемую блокировку на элемент «Товар 1» по ссылке. В это же время в транзакции № 2 мы пытаемся установить исключительную управляемую блокировку, но по наименованию «Товар 1» и становимся в ожидание. 

Вопрос: откуда платформа узнает, что заблокированный элемент в первой транзакции имеет наименование «Товар 1», мы же установили блокировку только по ссылке? Я сделал предположение, что должно быть дополнительное обращение к СУБД. Профайлер таковых не обнаружил. Но ожидание-то есть.

Возникла мысль: а что, если в транзакции № 2 попытаться установить блокировку по другому наименованию, например «Такого названия нет»? Результат –транзакция становится в ожидание.

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

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

Вот выдержка из технологического журнала, отлавливались события «TLOCK».

Блокировка по наименованию:

Regions=Reference9.REFLOCK,

Locks=’Reference9.REFLOCK Exclusive Description="Такого названия нет"’,

Блокировка по ссылке:

Regions=Reference9.REFLOCK,

Locks=’Reference9.REFLOCK Exclusive ID=9:a9b000055d49b45e11db8b8bdc1aadc2′,

Блокировка по ссылке и наименованию при записи элемента справочника:

Regions=Reference9.REFLOCK,

Locks=’Reference9.REFLOCK Exclusive Description="Малый" ID=9:a9b000055d49b45e11db8b8bdc1aadc2

has been added to your cart:
Оформление заказа