Управляемые взаимоблокировки. Подготовка к сдаче экзамена 1С:Эксперт.
Вспоминаем природу возникновения взаимоблокировок, расследуем и устраняем два реальных конфликта управляемых блокировок.
Запишитесь на курс «1С:ЭКСПЕРТ по технологическим вопросам», чтобы:
* Разрабатывать, внедрять, сопровождать 1С системы уровня High Load и 24/7;
* Обслуживать базы больших объемов;
* Решать задачи производительности так же легко, как обычные ошибки в коде;
* Достичь высшей ступени квалификации технического специалиста 1С.
Записаться на курс - amp.gs/jTLwx
Логи, на которых можно повторить примеры из видео, здесь:
drive.google.com/drive/folder...
Пікірлер: 12
Елена, отличные видео, большое спасибо, очень жду следующих. Есть огромная просьба, прикладывать архив с ТЖ, что бы можно было самостоятельно провести анализ. Вопрос по первой блокировке, почему не взаимоблокируется еще и поле "ИмяФайла", которое тоже есть измерение и вроде как должно попадать всеми значениями в блок, как неуказанное?
@elenaskvortsova4478
2 жыл бұрын
Большое спасибо, рады, что видео показались полезными. По поводу логов с воспроизведением демо-примера - думаю, что чуть позже сможем их выложить. По вопросу: ИмяФайла - ресурс, а не измерение.
А почему в конце ролика при установке ручной блокировки в качестве значения указывается ссылка, а не значение поля «Документ» из строки табличной части? Сам РС независимый, движения в нем создаются вне зависимости от контекста модуля проведения документа поступления на расчетный счет. Не совсем понял этот момент.
@elenaskvortsova4478
2 жыл бұрын
Да, вы совершенно правы, спасибо за внимательность. Должно быть так: ЭлементБлокировки.УстановитьЗначение("Документ", стр.Документ); К сожалению, в видео допущена ошибка. Но основная цель - показать, что перед чтением набора записей необходимо устанавливать исключительную блокировку, мы старались проиллюстрировать именно это.
@user-sj8em7bm6e
Жыл бұрын
@@elenaskvortsova4478 Спасибо за наглядные примеры. Кстати кажется можно было без проверки на статус и без блокировки всегда писать статус "оплачен".
@MrElInfinito
21 күн бұрын
@@user-sj8em7bm6e Набор записей регистра сведений всегда считывается в НЕЯВНОЙ транзакции с наложением S-блокировки, поэтому без X-блокировки нельзя. Статус "оплачен" нельзя всегда ставить, так как записи в наборе может и не быть, что должно быть понятно по коду.
Добрый день. А можно в каком-то виде воспроизведение выкладывать? Хотя бы только ТЖ в архиве + файл выгрузки .bak из SQL, где будет только пустая база?
@user-mq9hs6wp5s
2 жыл бұрын
Здравствуйте. В ближайшее время добавим в описание.
Спасибо за видео! Очень жду следующие части. Жаль, что так редко выходят. Поясните, пожалуйста, момент, озвученный в 13:53. У меня не получается проследить связь указанной взаимоблокировки с захватом ресурсов в разном порядке. По идее, второе соединение не смогло бы установить эксклюзивную блокировку на всё пространство "часть файлов = *", т.к. на это же пространство уже наложена блокировка первым соединением? Напрашивается вывод, что на пространство "часть файлов = *" оба соединения устанавливают разделяемую блокировку. А затем оба пытаются наложить явную эксклюзивную блокировку на конкретные значения: "часть файлов = 1" и "часть файлов = 2", что приводит к взаимоблокировке из-за взаимной попытки повышения уровня изоляции на общий ресурс.
@capitan_nemo
Жыл бұрын
В видео все верно. Разделяемых блокировок нигде не накладывается. Если обе транзакции начались примерно одновременно, то они накладывают сначала успешно перед запросом непересекающиеся эксклюзивные блокировки в первом пространстве, потом при записи нз они на первое пространство пытаются наложить эксклюзивную блокировку целиком на все, первая начинает ждать вторую, как только вторая делает то же самое возникает дедлок.
Блокировка в цикле это норм? 21:43
@elenaskvortsova4478
2 жыл бұрын
Смутить скорее должно чтение набора записей в цикле, потому что это не что иное, как запрос. Но и это зависит от кейса, точнее, от количества итераций, в данном случае по смыслу их должно быть очень мало.