#0
by МОРЖ
При добавлении данных в регистр сведений какие блокировки накладываются на таблицу регистра? Есть ли зависимость типа блокировок от способа добавления записи(набор или менеджер записей)? Могу ли я увеличить параллельность добавления записей в регистр сведений?
#3
by Serginio1
Если у тебя автоматические блокировки то значит у тебя уровень изоляции Repeatable read. Если ты делаешь запись в транзакции то соответственно любые чтения у тебя блокируют и запрешают изменения. Если у тебя управляемые блокировки то уровень изоляции понижается до уровень изоляции понижается до read committed и нужно вручную накладывать блокировки. Смысл их один Писатель, много читателей. Перед записью накладывай исключительную блокировку, а если хочешь, что бы данные не менялись в процессе транзакции накладывай Разделяемый
#5
by Fragster
в мсскуль блокировка может (и будет в большинстве случаев) накладываться на диапазон. у независимого РС есть т.н. основной отбор. если он на все измерения - то разницы между набором и записью - нет (набор = запись), если не на все, то следует понимать, что при записи одной строки будет записываться набор целиком по комбинации измерений основного отбора.
#7
by МОРЖ
Идею блокировок я понимаю. Пытаюсь понять как их отрабатывает платформа по умолчанию. Режим блокировок у РС управляемый, но в коде блокировки не прописаны. В этот РС параллельно пишутся данные. Пытаюсь понять, можно ли и нужно ли что-то сделать, чтобы параллельные добавления данные не мешали друг другу. судя по всему на регистр накладываются разделяемые блокировки с отбором по записываемым измерениям, и по скольку наборы измерений различны процессы благополучно выполняются параллельно. Нет необходимости прописывать управляемую блокировку с отбором по измерениям?
#9
by Fragster
управляемая блокировка нужна только если тебе важна неизменность результата - т.е. если ты опираешься на какие-то данные (разделяемая) или запрещаешь другим опираться на какие-либо данные (исключительная)
#10
by krbIso
при модификации данных, в управляемом режиме блокировки накладываются автоматически менеджером блокировок 1С.
#11
by Fragster
например в одни и те же данные пишутся параллельно в несколько потоков и это позволяет записывать намного больше данных за 1 единицу времени (тут, конечно, зависит от оборудования).
#14
by Serginio1
Это понятно, просто перед записью обычно требуется сначала прочитать, а уж потом модифицировать.
#17
by Serginio1
Обычно когда нужно сначала рассчитать считывая данные с разных регистров, а затем записать. Есть варианты когда можно записывать сразу без дополнительных расчетов. Что касается 9 то это не совсем верно. Исключительная блокировка предотвращает не только чтение но и запись предотвращая дид луки. Если две транзакции сначала сделают разделяемую блокировку а затем начать писать, то ничего не выйдет, будут блокировать друг друга . Поэтому исключительная блокировка сначала ждет завершения всех транзакций, а затем уже делает с этими данными что хочет. Это аналог блокировок много читателей один писатель. Зная что ты будешь эти данные модифицировать и проводя предварительно расчеты.
#19
by Serginio1
. Блокировки типа Update нужны для обозначения такого факта: те, кто уже имеет Shared locks на этот же ресурс могут продолжать ими пользоваться, но любые новые блокировки запрещены. Как только shared locks уходят с ресурса блокировка типа U конвертируется в eXclusive, чтобы обозначить соответственно названию, что никакими другими сессиями этот ресурс не заблокирован вообще. Короче, смысл блокировок U - не блокировать данные _читаемые_ при выборке под UPDATE, а обозначать факт того, что мы намереваемся менять данные сразу после того как уйдут те, кто их сейчас читает. То есть ты можешь не дожидаться окончания shared locks как это было бы с eXclusive но до записи совместно читать данные.
#20
by Serginio1
Поскольку взаимоблокировка произошла из-за того, что транзакции удерживали коллективные блокировки и потом попытались их повысить до эксклюзивных, то, в принципе, помочь избежать неприятностей в данном случае сможет понижение уровня изоляции до READ COMMITED. При этом коллективная блокировка не будет держаться до конца транзакции, а снимется сразу после завершения чтения, а значит, обновить записи ничто не помешает. Но тогда вместо взаимоблокировки мы вполне можем получить неверные данные, так как между SELECT и UPDATE сможет втиснуться другая транзакция, которая изменит Y и данные, полученные SELECT’ на момент UPDATE, окажутся неактуальными, чего в некоторых случаях допускать нельзя. Можно также сразу при чтении наложить эксклюзивную блокировку, но это тоже не самый лучший выход с точки зрения производительности, так как могут существовать транзакции, которым эти данные надо просто прочитать, а наложение эксклюзивной блокировки увеличивает время их пассивного ожидания. В общем случае наилучшим выходом здесь будет наложение при чтении промежуточной блокировки обновления. Такая блокировка совместима с коллективной, что позволит читающим транзакциям обращаться к этим данным беспрепятственно. А когда понадобится их обновить, то проблем быть не должно, так как блокировки обновления между собой несовместимы, и значит, другие транзакции, читающие эти данные для последующего изменения (и естественно тоже запросившие их с блокировкой обновления), будут ждать, пока эти данные поменяются, никому не мешая. Для этого необходимо изменить первый оператор транзакции примерно таким образом: SELECT @Var = Y FROM Tbl WITH (UPDLOCK) WHERE X = 2
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Обнуляются записи в регистре сведений при добавлении новой записи
- Есть ключ записи регистра сведений. Как получить имя этого регистра?
- Как получить имя регистра сведений из формы записи этого же регистра?
- Удаление записи регистра сведений в форме списка регистра
- Свойства НОВОЙ записи при копировании записи Регистра Сведений
- Управляемые блокировки в УПП
- Как выбрать записи из регистра сведений записи
- не работает установка блокировки соединений ИБ
- Открытие формы записи для новой записи регистра сведений с установленным полем.
- Ошибка снятия блокировки объекта. Нет данных о блокировке записи
- Сообщение пользователю при записи на сервере о текущем состояние записи
- При записи в регистр бух. Хозрасчетный ошибка: Поле объекта недоступно для записи Субконто
В этой группе 1С
- Перевод магазина с "1С-Рарус: Магазин", ред.2, 7.70.213 на 1С:Розница 8.2
- При запуске 1С начинается установка принтера.
- Редактирование ActiveDocument на форме 1С
- Передать переменную из одной формы документа в другую форму
- Изменение документа "Ввод начальных остатков"
- Пропало окно служебных сообщений у пользователя.
- УТ 11 Отсутствует база для распределения расходов по правилу
- Форма отчета СКД на УФ. Поймать событие выбора варианта.
- УТ11 ввести номер ГТД для номенклатуры
- v7: Как результат запроса сохранить в DBF?
- БП 2.0 Исправление документа реализации и его неправильной корректировки
- v7: Не работает раскраска справочника при отключении выборочной раскраски
- Как сделать отбор по свойствам реквизитов у ИсточникаДанных (Построитель отчета)
- УТ11 файловая база тормозит по сети
- БП 2.0 Расчет курсовых разниц
- Ошибка "обнаружена незавершенная операция сохранения конфигурации"
- Подбор в чеке ККМ в ут10.3
- Ут 10.3 Ошибка при загрузке из периферийного узла
- Фискальный регистратор, пробивается ТАРА вместо обычной оплаты.
- Перехват сообщения об ошибке при вводе в периодический регистр сведений