Каталог решений - Приложение к публикации: Для чего нужны блокировки(с).

Приложение к публикации: Для чего нужны блокировки(с).

Приложение к публикации: Для чего нужны блокировки(с).

В наличии

Блокировки нужны только там, где производится контроль остатков?

Категория:

Описание

Ссылки по теме «блокировки в 1С 8.х»:

0) «Для чего нужны блокировки».

Филиппов Олег (comol). 26 сентября 2011 г.

//sale.itcity.ru/public/91880/

1) «Блокировки данных в 1С:Предприятии 8».

Автор: © Белоусов Павел (Альтер Лого, Москва). Данная статья является фрагментом книги П.С.Белоусов, А.В.Островерх «1С:Предприятие: от 8.0 к 8.1». Дата выхода книги: ноябрь 2007. (Информация с ресурса http://1cexpo.ru)

http://lavelin.ru/index.php/article/1c/54-razrabotka/136-blokirovki-dannyh-v-1spredpriyatii-8

2) «Фирма 1С улучшает производительность параллельной работы в новой УТ».

Гилёв Вячеслав. 23 июля 2010 г.

http://gilev.blogspot.com/2010/07/1_23.html

3) «Управление блокировками данных в транзакции, механизм (Transaction Data Lock Control, Mechanism)».

http://v8.1c.ru/overview/Term_000000642.htm

 

Перед прочтением данной публикации необходимо прочесть [0].

 

Отправной точкой моих рассуждений служит:

«…пример «ручного» управления блокировками данных при чтении данных регистра накопления УчетНоменклатуры в обработке проведения документа РасходнаяНакладная.»[3]


Соглашаясь с утверждением:

«А в управляемом у вас будет READ COMMITED, который будет накладывать и тут же снимать S блокировку при чтении, и X только при записи.»[0]

Только уточню, что Х блокировка останется до завершения транзакции.


Поступаем так как рекомендовано:

«Можете их просто не устанавливать, или прописать и закомментировать до лучших времён.»[0]

В нашем примере из [3] уже прописаны операторы «ручного» управления блокировками, придется их «закомментировать». Код чтения остатков для проверки «отрицательности» выполняет лишнюю работу. Думаю, его тоже следует «закомментировать».


Вроде, всё сделали как рекомендовано в [0] статье. Но алгоритм модуля проведения был разработан исходя из того, что остатки надо накапливать и, если требуется, то и проверять на «отрицательность». Т.е. кроме добавления уникальных строк движения производится еще и модификация некой, итоговой по измерению, записи в регистре накопления. И эта запись будет находится в заблокированном состоянии до конца выполнения транзакции.


Следуя предположению: «вы продаёте булочки или шариковые ручки»[0], и допустив, что отгрузка производится не вагонами (иначе трудно представит безразличие к остаткам) делаем допущение, что торговать приходится и булочками, и шариковыми ручками.

Готовим две расходные накладные на разных компьютерах с такой последовательностью товаров:

1)Булочки, Ручки.

2) Ручки, Булочки.

Запускаем проведение «разом». Платформа готовит запрос для СУБД и отравляет его на исполнение. Сессии ждут результата. Т.к. платформа ничего не знает о нашей «бизнес логике»[0] в вопросе «отрицательности» остатков, то «угрюмо» пытается наложить Х блокировку на итоговую запись регистра накопления. И получает банальный конфликт блокировок (deadlock). Возможно, что платформа расставляет «строки» документа в неком «одинаковом» порядке.

1)Ручки, Булочки.

2) Ручки, Булочки.

Это может, теоретически, упростить задачу выхода из deadlock. Но, в любом случае, полной «параллельности» проведения документов не получится. Точнее, наоборот, будет обеспечиваться, именно, последовательное проведение документов.

Чем, собственно, и призван заниматься инструмент «Управляемые блокировки»[1].

Т.е. проблемный программист получил возможность ЗАРАНЕЕ сообщить платформе, о логике своего алгоритма, прежде всего, для упорядочения (приведения к единому порядку) «воздействий» на информацию в базе данных. Чтобы платформа могла построить запрос типа «Ручки, Булочки» для ВСЕХ алгоритмов конфигурации. Например, приходные накладные и расходные накладные не будут «попадать» в deadlock, а проводиться последовательно. Это если в них будут существовать «одинаковые» объекты блокировки. А если ВСЕ объекты будут разные, то документы смогут проводится не мешая друг-другу.

Но, платформа не может упорядочить всё и вся. Например, в [2] есть такая фраза: «Следует всегда придерживаться одинакового порядка записи регистров (например, алфавитного).». Это означает, что автоматические средства платформы упорядочения «воздействий» на БД не безграничны. Приходится много прописывать и проблемному программисту руками.


Что касается задачи проверки «отрицательности» остатков, то существуют пути:

1) Если такая проверка, вообще, не требуется, то не следует использовать «итоги по измерению».

2) Если проверка «отрицательности» требуется, то поступать как описано в [2].

Есть масса других путей, но это не в текущей версии «1С:Предприятие».

Но в любом случае блокировки никуда не исчезнут.


В заключении скажу, что блокировки требуются не «только там где производится контроль остатков»[0], но и там где требуется обеспечение «согласованных данных»[0] не только на уровне СУБД, но и на уровне схемы базы данных. Т.е. на уровне «бизнес логики»[0], если схема базы данных отражает бизнес логику…

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