#0
by Max Street
Привет. И снова управляемые блокировки:) Есть 2 варианта режима блокировки: разделяемый и исключительный. Первый используется, когда данные блокируются от записи, второй - от чтения и записи. Вопрос такой: а как же определить, когда нужно заблокировать чтение и запись, в когда только запись
#3
by andreymongol82
Какие еще могут быть варианты? Смотрим что нужно сделать. Смотрим что изменится от этих действий. Выбираем. Кстати, в описании описание 2х режимов блокировке у вас ошибка. почитайте, хотя бы вот это
#6
by Serginio1
Если хочешь читать с повторным чтением то используй разделяемый (REPEATABLEREAD) , если хочешь сначала прочитать, а затем записать то используй исключительный (SERIALIZABLE)
#9
by Max Street
сорри, выразился неправильно. речь идет об управляемых транзакционных блокировках. почему? вот определение: "исключительный режим блокировки подразумевает, что заблокированные данные не могут быть изменены другой транзакцией до окончания текущей транзакции, а также не могут быть прочитаны другой транзакцией, устанавливающей разделяемую блокиовку на эти данные". я чего-то не понимаю? объясните, пожалуйста
#12
by Spieluhr
все верное понимаете. механизм работы СУБД таков (речь о работе в транзакции): сначала ставится блокировка, только потом считываются данные вне транзакции - да
#13
by Spieluhr
правило очень простое: если в транзакции будет запись каких-то данных, например строк табличной части в набор записей регистра, то сразу ставим на таблицу регистра исключительную по значениям в таб. части
#14
by rs_trade
А вообще ответ на вопрос содержиться как ни странно в Руководстве разработчика, на странице 556.
#15
by Serginio1
Например ты хочешь изменить данные. Тебе нужно сначала эти данные прочитать и сделать так, что бы эти данные не изменились. Если ты применишь к этим данным разделяемый режим, то другая транзакция тоже пишущая с этими позициями будет выполняться до записи 1 транзакции при этом заблокировав на запись. 1 транзакция хочет записать а не может так как вторая держит. Когда придет время писать второй она тоже не сможет так как записи держит 1 транзакция и получается дид лок
#16
by Max Street
спасибо большое. то, что нужно следовательно, разделяемый режим блокировки ставится в случае, если я только считываю данные из регистра, но не изменяю их. так?
#17
by krbIso
Почти, ставится если необходимо обеспечить неизменность считываемых данных до конца транзакции.
#19
by Serginio1
Например ты хочешь посчитать остаток на конкретную дату. Тебе нужно получить остаток на начало периода и движения до даты. Если ты будешь читать в транзакции READ COMMITED (по умолчаниб для управляемых), то уже прочитанные данные могут измениться и ты получишь неправильные данные, что бы этого не было ставится хинт REPEATABLEREAD запрешающий изменение уже прочитанных данных.
#20
by Max Street
сорри за мою безграммотность, но READ COMMITED и REPEATABLEREAD это соответственно исключительный и разделяемый режимы?
#22
by krbIso
хинт REPEATABLEREAD указывает что используется данный уровень изоляции, уровень изоляции определяет какая блокировка и на какое время будет установлена. т.е. в будет изменен уровень изоляции с READ COMMITED на REPEATABLEREAD и блокировка S будет продлена до конца транзакции.
#24
by Max Street
спасибо. но эти блокировки используются вроде бы в режиме автоматических блокировок?
#25
by Serginio1
Автоматический использует уровень изоляции REPEATABL EREAD. Управляемый использует уровень изоляции READ COMMITED Для того что бы в этом режиме сделать повторяемое чтение нужно наложить хинт Select * From Таблица T4 WITH(REPEATABLEREAD) Если мы хотим применить исключительную блокировку применяем Select * FROM _Таблица T3 WITH(SERIALIZABLE)
#28
by Serginio1
27 Тьфу читать Без подсказок в автоматическом режиме могут возникать ситуации описанные в 15, така как чтение там повторяющееся по умолчанию. А в управляемых ты сам контролируешь какие записи и как должны блокироваться.
#29
by Max Street
я что-то запутался совсем. а потому заранее прошу прощения за повторение, поправьте, пожалуйста, меня, если я не прав. Итак, при управляемых транзакционных блокировках испоьзуется режим Исключительный в случаях, когда я читаю данные и затем изменяю/записываю в набор записей. Если мне требуется обеспечить неизменность данных и данные я только читаю, но не изменяю их, я устанавливаю Исключительный режим. А что делать, чтобы избежать ситуации, описанной в ?
#30
by Max Street
* в предпоследней строке вместо Исключительный режим должно быть Разделяемый режим
#31
by Serginio1
Если ты только читаешь, то используешь разделяемый. При этом режиме не изменятся данные которые ты уже прочитал.
#36
by MM
Почему в этой теме столько неверных утверждений. В управляемом режиме используется только уровень изоляции транзакций READ COMMITED (или SNAPSHOT). Характерной чертой которого, является то, что происходит получение только данных завершённых транзакций, после чтения в этом режиме данные легко могут быть изменены любой другой транзакцией. Задержка может быть только при попытке прочитать изменённые, но не зафиксированные данные. Уровень SNAPSHOT (доступен в 8.3) позволяет, прочитать данные на начало транзакции независимо от того изменились ли они другими транзакциями. Т.о. исключительная блокировка (ставится сервером 1С, сервер СУБД о ней не знает) позволяет не допустить изменения (возможно уже прочитанных) данных до конца транзакции, в течении которой их будут менять. Чтобы избежать ситуации когда, 1я транзакция прочитала остатки, 2я прочитала - остатков достаточно, 1я записала и закончилась, а затем 2я записала поверх данных первой. В результате получаем минусы в остатках.
#37
by Serginio1
.. Т.о. исключительная блокировка (ставится сервером 1С, сервер СУБД о ней не знает) .. Угу FROM _AccRg5523 T3 WITH(SERIALIZABLE) LEFT OUTER JOIN _Acc6_ExtDim5518 T4 WITH(REPEATABLEREAD)
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Некорректное завершение - монопольный режим.
- Как принудительно установить "Режим открытия объектов" в режим "Открытие"
- Вопрос по ЕСН (Общий налоговый режим)
- Привилегированный режим и режим запуска приложения - какая связь?
- READ_COMMITTED_SNAPSHOT и автоматический режим блокировки данных
- Режим монитор. Подскажите пожалуйста как в 1с 8 запустить режим "Монитор
- режим блокировки при проведении документа
В этой группе 1С
- Подскажите, пжл, сколько должно быть свободного места на диске С?
- Ошибка при вызове метода контекста(Сдвинуть)
- КД - режим записи.
- Отправка 4-ФСС из ЗУП/ЗБУ: не дает выбирать для подписи нужный сертификат
- Отчет через CОМ соединение
- Передать реквизит из формы списка в форму элемента
- Осваиваем УТ. как из поступления убрать колонки НДС?
- Обход результата запроса 1С в ВК
- Как получить только однин штрих код у номенклатуры
- "Контур-Фокус" - кто нибудь пробовал?
- Хранилище значений и регистр сведений
- Переход на платформу 8.2.18
- В 8ке есть аналог функции "Шаблон()" из 7.7 ?
- Состояние обеспечения заказа 1с ут 11 есть ли рабочие варианты?
- Регистр сведений срез последних неправильно работает
- Универсальная обработка: редактирование справочников/документов (УФ)
- СКД поменять заголовок полей в макете
- Как проверить, заполнены ли все субконто?
- Конвертация данных: "Тип не определен"
- 1с 8.2 Диалог выбора файла в управляемом приложении