Управляемые блокировки по полям из свойства "Поля блокировки данных"
Добрый день, коллеги!
Призываю коллективный разум.
Вопрос по установлению управляемой блокировки на пространство справочника по имени поля, заданному в свойстве «Поля блокировки данных», например, по наименованию.
Предположим, что мы работаем со справочником «Товары». Транзакция № 1 хочет что-то сделать с элементом «Товар 1» и устанавливает исключительную управляемую блокировку на элемент по ссылке. В это время транзакция № 2 тоже хочет установить исключительную управляемую блокировку, но пытается это сделать по наименованию «Товар 1» и становится в ожидание.
Вопрос в следующем: как менеджер блокировок узнает, что в описанном случае транзакции пытаются установить блокировку на один и тот же элемент?
Менеджер блокировок MS SQL Server при блокировке ключей работает достаточно прямолинейно: берется ключ, вычисляется на его основе хэш и помешается в таблицу. Другая транзакция, обращаясь к этой же строке, тоже вычисляет хэш на основе ключа, обнаруживает такой же хэш в таблице блокировки и, в случае несовместимости, становится в ожидание. В описанном мной случае применить подобный механизм напрямую не получится, так как блокировка устанавливается по разным полям.
Я пытался исследовать разные гипотезы, такие как:
• При установке блокировки по ссылке, устанавливаются так же блокировка по наименованию (или по другим полям, указанным в свойстве)
• При установке блокировки по наименованию, получаются ссылки с таким же наименованием и на них устанавливаются блокировки
В общем, было предположение, что необходимо дополнительное обращение к СУБД для получения дополнительных данных. Но ни технологический журнал, ни профайлер никаких дополнительных запросов не поймали.
Таким образом, этот механизм не текущий момент мне не понятен. Есть какие-нибудь мысли и/или информация на этот счет?
Призываю коллективный разум.
Вопрос по установлению управляемой блокировки на пространство справочника по имени поля, заданному в свойстве «Поля блокировки данных», например, по наименованию.
Предположим, что мы работаем со справочником «Товары». Транзакция № 1 хочет что-то сделать с элементом «Товар 1» и устанавливает исключительную управляемую блокировку на элемент по ссылке. В это время транзакция № 2 тоже хочет установить исключительную управляемую блокировку, но пытается это сделать по наименованию «Товар 1» и становится в ожидание.
Вопрос в следующем: как менеджер блокировок узнает, что в описанном случае транзакции пытаются установить блокировку на один и тот же элемент?
Менеджер блокировок MS SQL Server при блокировке ключей работает достаточно прямолинейно: берется ключ, вычисляется на его основе хэш и помешается в таблицу. Другая транзакция, обращаясь к этой же строке, тоже вычисляет хэш на основе ключа, обнаруживает такой же хэш в таблице блокировки и, в случае несовместимости, становится в ожидание. В описанном мной случае применить подобный механизм напрямую не получится, так как блокировка устанавливается по разным полям.
Я пытался исследовать разные гипотезы, такие как:
• При установке блокировки по ссылке, устанавливаются так же блокировка по наименованию (или по другим полям, указанным в свойстве)
• При установке блокировки по наименованию, получаются ссылки с таким же наименованием и на них устанавливаются блокировки
В общем, было предположение, что необходимо дополнительное обращение к СУБД для получения дополнительных данных. Но ни технологический журнал, ни профайлер никаких дополнительных запросов не поймали.
Таким образом, этот механизм не текущий момент мне не понятен. Есть какие-нибудь мысли и/или информация на этот счет?
По теме из базы знаний
- Работа с управляемыми блокировками в примерах. Новая схема проведения документов 1с 8.2.
- Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2/3.0
- Управляемые блокировки по полям из свойства "Поля блокировки данных"
- Управляемые блокировки - для подготовки к экзамену Специалист 1С
- ВИДы на жительство. Использование внешних источников данных в прикладных задачах
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Можно же проверить, наложить блокировку по ссылке, а во втором сеансе по наименованию, а потом посмотреть, блокируется что или нет. Сам же менеджер блокировок 1С ничего не блокирует, а просто содержит информацию о том, какая транзакция хотела менять какие-либо данные.
На ИТС, в главе 9.3.4 (к платформе 8.3.13) написано:
Но это в случает изменения объекта, а если мы его пытаемся просто заблокировать для чтения, то не понятно что в этом случае будет. Проверить будет проще.
На ИТС, в главе 9.3.4 (к платформе 8.3.13) написано:
При удалении или изменении объекта, для которого доступна блокировка по полям, выполняется одна блокировка, включающая в себя блокировку по полю Ссылка и по всем полям, указанным в свойстве Поля блокировки данных. При выполнении изменения объект блокируется как по «старым» значениям полей (которые были до начала записи), так и по «новым» значениям (которые находятся в записываемом объекте).
Но это в случает изменения объекта, а если мы его пытаемся просто заблокировать для чтения, то не понятно что в этом случае будет. Проверить будет проще.
(2)Блокировка происходит - это я первым делом проверил. Если в технологический журнал выводить событие TLOCK, то будет видно, что в первом случае блокировка накладывается на пространство справочника по ссылке, во втором - по наименованию, но непонятно, как определяется их связь.
Вопрос, конечно, чисто теоретический - практической пользы в нем никакой нет, чистое любопытство.
Вопрос, конечно, чисто теоретический - практической пользы в нем никакой нет, чистое любопытство.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот