Есть довольно понятная идея:
Если мы хотим, чтобы многопользовательская система работала быстро – нужно, среди прочего, подумать, как минимизировать ожидания на блокировках. Как только появляются ожидания – замедляется проведение документов.
Поэтому важно проектировать поведение системы на самых ранних этапах – до написания программного кода.
И здесь есть важный нюанс:
программисты часто думают, что управляемые блокировки происходят на уровне записей.
Это, увы, не так :)
Мы подготовили для Вас видео, в котором рассказали, по каким принципам блокируются строки во время работы пользователей и как свести к минимуму количество ожиданий из-за блокировок.
Как это часто бывает, некоторые из этих нюансов в документации не описаны…
Длительность видео 9 минут – и оно того стоит.
Это же всегда неловкий момент, когда ты веришь, что что-то должно работать одним образом, а потом оказывается, что все совсем иначе :)
Тайминг ключевых моментов:
00:41 – постановка задачи
01:52 – демонстрация ожидания при управляемых блокировках
03:09 – первый принцип работы управляемых блокировок
04:40 – второй принцип работы управляемых блокировок
06:46 – третий принцип работы управляемых блокировок
07:37 – анализ причин ожидания на блокировках в решаемой задаче
08:47 – решение проблемы
Умение находить и устранять причины медленной и нестабильной работы систем на 1С - обязательно для программистов 1С
После курса Вы сможете:
- Оценивать состояние системы в любой момент времени
- Быстро находить причины замедления в программном коде – и сразу писать его так, чтобы замедления в будущем не было
- Отслеживать динамику производительности за определенный период
- Устранять ожидания на блокировках и решать проблемы со взаимоблокировками
Для кого этот курс
Вам нужен этот курс, если Вы хотите:- Писать код, за который не стыдно – в нестабильное время особенно важно быть в компании на хорошем счету
- Быть востребованным специалистом – на каждом втором собеседовании спрашивают про умение оптимизировать 1С
- Не терять клиентов из-за того, что «ваша 1С тормозит, а вы ничего не делаете» – это и раньше было нехорошо, а теперь и вовсе непозволительная роскошь.
- 16 учебных часов видео
- 50 практических заданий
- 3 месяца поддержки и доступа к ответам на вопросы
- Пожизненный доступ к видео-урокам и учебным материалам
Спасибо за наглядное объяснение в виде графиков и схем! Это самый понятный вид объяснения и ваш ролик самый понятный из всех имеющихся в интернете материалов на эту тему которые мне встречались!
Рады, что материала оказался полезным для Вас.
Благодарю за понятное, наглядное объяснение!
Всегда представлял в табличном виде. И вот наткнулся на неожиданное для меня поведение.
И вот сегодня я прозрел! :)
Здравствуйте, Антон! Рады, что материал был полезен! Передали Ваши слова автору!
Будет здорово, если Вы поделитесь этой статьей с коллегами, возможно, кто-то из них тоже получит новые знания ;)
Актуальна ли данная статья на текущий день? Просто об этом как будто бы нигде не рассказывается в том числе и на сайте ИТС и в курсах от Учебного центра 1с. Я даже больше скажу, кроме вашего ресурса нигде больше не рассказывается про то, что блокировки происходят по области
Конечно актуальна!
Это довольно тонкие материи, об этом немного говорят на курсах подготовки к 1С Эксперт (про блокировку областей), но не уделяют этому много внимания.
Честно говоря, я тоже раньше не делал на этом акцент, но потом судя по вопросам понял, что люди не верно понимают работу упр. блокировок и путают их с блокировками строк на СУБД, а принципы то совершенно разные.
Именно после большого числа таких вопросов я и решил записать это видео.
Буду рад если поделитесь им с коллегами :)
Так сделано в УТ11 при выгрузке остатков на оффлайн ККМ, скорее всего, для устранения фантомного чтения. Обзор практики применения блокировок, оставшийся за пределами промо- видео, заслуживает отдельного внимания. имхо
Зачем накладывать УБ при чтении Штрихкодов из РС?
Какое отношение этот вопрос имеет к данному видео?
А это так работает и на файловой базе? А то у меня почему-то конфликт блокировок происходит даже если я задаю все отборы, включая период – не могу понять почему.
Сергей, здравствуйте.
На файловой базе при записи всегда блокируется вся таблица целиком, она изначально не предназначена для параллельной работы.
Явные управляемые блокировки можно установить на разные записи, но когда вы будете объект записывать, блокировка все равно будет на всю таблицу.
Правильно ли я понял, что это справедливо и для объектных сущностей, например для документов. В типовой ЕРП есть строки:
1-я блокировка
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить(“Документ.СообщениеЭДО”);
ЭлементБлокировки.УстановитьЗначение(“Ссылка”, Ссылка);
Блокировка.Заблокировать();
2-я блокировка
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить(“Документ.СообщениеЭДО”);
ЭлементБлокировки.УстановитьЗначение(“ЭлектронныйДокумент”, СообщениеОбъект.ЭлектронныйДокумент);
Блокировка.Заблокировать();
2-я блокировка будет ожидать первую?
Да вы все верно поняли, в принципе это легко проверить если провести опыт.
Эти блокировки не будут ждать друг друга только если у них режим Разделяемый, но т.к. тут режим явно не указан, то по умолчанию используется режим Исключительный, поэтому ожидание будет.
Хорошая визуализация! У меня как-то понимание пространства блокировок появилось сразу, без уточнений, видео и прочего, хотя у меня в голове это немного не так выглядит, но я бы даже не смог сходу визуализировать это (возможно потому, что у меня в голове нет четкой установки, что у таблицы обязательно должно быть поле первичного ключа, поэтому понятие “запись” для меня слишком абстрактна, чтобы на него вешать еще и понятие блокировки) Из видео, кстати, понятно, что в любом месте кода можно случайно забыть уточнить блокировки и будут неожиданные эффекты конфликтов.
А вот то, до чего сам доходишь, так это например то, что порядок измерений играет роль – это было для меня неожиданностью
Большое спасибо вам за отзыв.
Очень полезное видео, принципиальная разница между записями и пространствами. Спасибо.
Рады, что материалы были полезны!
Блин. Все таблицы плоские, Нет там областей, есть записи. 10 лет писал а FoxPro и ни каких проблем не возникало с блокировками записей. Откуда этот гимор???
Речь идет не о таблицах и блокировках СУБД, в видео говорится про управляемые блокировки которые “живут” на сервере 1С, они блокируют не таблицы СУБД, а пространства 1С.
Спасибо за ценную информацию!
Пожалуйста!
Интересного обучения!
Андрей, добрый день! Спасибо за разъяснение.
Подскажите, если блокировка набора записи (подчинен регистратору) происходит по регистратору. Значит при проведении двух документов регистраторов возникнут блокировки на наборах, у которых совпадают значения хотя бы одного из измерений, правильно?
Здравствуйте.
1. То что регистр подчинен регистратору здесь роли не играет, т.к. регистраторы разные то и ожидания на пространстве ИмяРегистра.НаборЗаписей практически никогда не бывает.
2. Что бы было ожидание на обычном пространстве блокировок, у вас должна быть хотя бы одна одинаковая комбинация значений измерений в обоих документах.
Если значение хотя бы в одном измерении отличается то это уже другая область.
Попробуйте от руки начертить координатную сетку как на видео, и в уме провести 2 документа параллельно закрашиваю квадраты, думаю все сразу встанет на свои места.
Вообще ситуация из видео когда не указано значение поля блокировки не возможна при записи движений при проведении, т.к. в этот момент платформа сама ставит упр. блокировку по всем измерениям регистра.
Надеюсь я правильно понял вопрос, если что-то не понятно пишите.
У нас, например, проводятся в параллели много документов РасходСоСчета по регистру накопления “ДенежныеСредства”, где всего два уникальных измерения: Организация и Банковский счет. И много документов с одинаковыми этими полями. И судя по тех. журналу как раз часто возникает ожидание на блокировках к этому регистру, на пространстве DIMS (там перечислены все измерения, кроме регистратора). Запись идёт через объект Движения типовым кодом. При этом странно, что я в одном сеансе ставлю точку остановки сразу после записи объекта Движения, и у меня в другом сеансе спокойно проводится другой документ с таким же набором измерений. Хотя по идее первый сеанс должен был заблокировать эту область до конца транзакции. Разделение итогов у регистра не включено. Как такое возможно?
Михаил, здравствуйте.
> я в одном сеансе ставлю точку остановки сразу после записи объекта Движения, и у меня в другом сеансе спокойно проводится другой документ с таким же набором измерений. Хотя по идее первый сеанс должен был заблокировать эту область до конца транзакции. Разделение итогов у регистра не включено. Как такое возможно?
Ответ простой – никак. Либо разделение итогов все же используется, либо у вас разные наборы измерений, либо точка останова ставится после завершения транзакции.
Попробуйте сделать пустую клиент-серверную базу и воссоздать там эту ситуацию, скорее всего не получится.
Если получится, то пришлите эту базу, попробую воссоздать такое у себя.
Большое спасибо за информацию. А это видео никак не скачать?
Видео не скачивается, запускается только онлайн с сайта.
Век живи – век учись. Спасибо за объяснение – очень наглядно и доступно. В документации ничего подобного даже близко не написано, отсюда и большая часть проблем у всех.
Вам спасибо за отзыв.
Класс! Спасибо!
Все 9 минут видео-уроков это по факту одно предложение:
“При установке управляемых блокировок устанавливаете отбор по максимально возможному количеству полей”.
Видимо вы пропустили начало :) основной смысл видео в том что бы объяснить почему происходит ожидание, а уж если понятно почему, то становиться очевидно как его устранить.
Я правильно понял, что , управляемая блокировка , это вовсе не блокировка данных , даже по пустому регистру нельзя заблокировать только товар 1 и потом отдельно склад 1, потому что в виртуальные области пересекутся?
> управляемая блокировка , это вовсе не блокировка данных
Управляемая блокировка это не блокировка строк в таблицах СУБД, это блокировка неких областей, которая происходит исключительно на сервере 1С.
> даже по пустому регистру нельзя заблокировать только товар 1 и потом отдельно склад 1, потому что в виртуальные области пересекутся?
Верно, т.к. не имеет значения пустой регистр или нет, упр. блокировка работает не со строками СУБД, а с теми значениями которые указаны при установке блокировки, будут заблокированы области на сервере 1С, а не строки СУБД.
Добрый день. Правильно ли я понимаю из рассмотренного примера, что во втором отборе при установке отбора по измерению Склад позволит избежать блокировки?
Михаил, здравствуйте.
Да верно, если у второго пользователя будет отбор по складу (отличному от склада 1) и по товару, тогда ожидания не будет т.к. будет заблокирована другая область.
Спасибо за статью Очень интересный переход от плоских таблиц к многомерным пространствам.
Вам спасибо за отзыв!
Есть такая профессия, пересказывать чужие курсы)
(1С:Учебный центр №1)
https://www.youtube.com/watch?v=FRwF-z5Xy7M&list=RDCMUCY5KNuYZAp2a67pOZGdpdDg&start_radio=1&t=31s
10 сент. 2021 г. рассказал о пространствах блокировок причем гораздо подробнее
и вот та-дам они здесь)
> Есть такая профессия, пересказывать чужие курсы)
О да, и я даже знаю людей работающих в одной большой компании, отлично эту профессию освоивших :)
Спасибо за видео, я посмотрел его очень внимательно, да, там действительно рассмотрен похожий случай, хотя и мимолетно и этому аспекту уделено всего несколько секунд без графиков и визуализации и т.д.
Хотя блокнот тоже визуализация, почему нет, это я придираюсь.
Анализ блокировок через консоль регулярками даже комментировать не хочу :)
Можно еще написать много чего насчет доступности восприятия и формы изложения, но у меня нет цели критиковать.
Цель моего видео раскрыть только один аспект управляемых блокировок который многие упускают из виду, без обширной теории, странно, что приходиться такие вещи писать, думал, это очевидно.
Ну не знаю. Как изложил материал Андрей мне больше понравилось. Если захочешь, то можно до всех докопаться, что они просто пересказывают то, что уже написано в желтых книжках.
Видимо автор того комментария не в курсе про мой курс 2015 года где эти темы так же раскрываются, ну да ладно, да и в желтых книжках этот момент не достаточно понятно описан, поэтому и возникает у людей столько вопросов.
Про то что блокируются области, а не записи я вообще информацию не встречал в документации, хотя возможно недостаточно глубоко копал.
Большое спасибо за видеоурок! Все предельно четко и понятно. Сам пока не сталкивался с блокировками, но в многопользовательской среде функциональность крайне важная.
Рады, что материалы оказались полезны.
Благодарим за отзыв!
В файловой базе данных тоже управляемые блокировки чтоли появились? Вобще это все в толстой книжке описано.
В файловой базе всегда блокируются таблицы целиком, их вообще нет смысла рассматривать в таком контексте.
Буду признателен если укажите где именно написано что управляемые блокировки не блокируют записи, а блокируют области.
Именно визуальное представление пересечений областей расширяет границы сознания и понимания. Супер.
Добрый день.
Благодарим Вас за высокую оценку статьи.
Спасибо за подробный и понятный разбор! Очень помогло)
Добрый день.
Благодарим Вас за отзыв. Мы рады, что наши материалы для Вас полезны.