Вход | Регистрация

1С:Предприятие ::

Метки: 

Почему происходит конфликт блокировок при такой схеме?

Я
   toypaul
 
21.02.18 - 16:01
НачатьТранзакцию

Запрос.Выполнить("Тут запрос по регистру, по которому конфликт")

ДокОб.Записать(Проведени)//вот тут конфликт


ЗафиксироватьТранзакию

или такая схема

НачатьТранзакцию
БлокировкаДанных.Заблокировать()//блокировка по регистру


ДокОб.Записать(Проведени)//вот тут конфликт которые выше был заблокирован


ЗафиксироватьТранзакию

Вроде как получается что транзакция проведения (записи) не видит транзакцию, которая выше и получается конфликт?

В 1й схеме вынес запрос за 1ю транзакцию и все норм стало. Код не мой. Просили разобраться почему не работает.
 
 
   Вафель
 
1 - 21.02.18 - 16:03
переходи на упр блокировки
   Fragster
 
2 - 21.02.18 - 16:03
в одном сеансе не бывает конфликтов блокировок
   toypaul
 
3 - 21.02.18 - 16:05
(2) сфига ли не бывает. когда конфликт это разные транзакции а не сеанс.
   Fragster
 
4 - 21.02.18 - 16:09
сеанс в 1с однопоточный
   toypaul
 
5 - 21.02.18 - 16:19
(4) и чо. нельзя сделать одновременно 2 транзакции что ли?

я вот не 1й раз уже сталкиваюсь когда

начатьтранзакцию

тут запрос к регистру или каким-то данным объектам

тут запись или проведени и все = привет конфликт блокировок

зафиксироватьтранзакцию()

если сделать так

тут запрос к регистру или каким-то данным объектам

начатьтранзакцию

тут запись или проведение, то все норм

зафиксироватьтранзакцию
   H A D G E H O G s
 
6 - 21.02.18 - 16:21
Вам бы почитать мануалов.
   toypaul
 
7 - 21.02.18 - 16:25
да я сам знаю что надо почитать. будет время почитаю
   H A D G E H O G s
 
8 - 21.02.18 - 16:39
Когда запрос выносим за транзакцию - на уровне СУБД режим изоляции - Uncommited Read, который снимается как только запрос закончится.
Когда запрос вносим в транзакцию - на уровне СУБД режим изоляции
1) RepeatableRead с S блокировкой до конца транзакции при автоматических блокировках, которая дает взаимоблокировку с X блокировкой Записать().
2) ReadCommited с S блокировкой на момент выполнения запроса при управляемых блокировках, которая не даст взаимоблокировку с X блокировкой Записать() но может исказить обработку результата запроса.
3) ReadCommited snapshot в 8.3 без блокировок на момент выполнения запроса при управляемых блокировках, которая не даст взаимоблокировку с X блокировкой Записать() но может исказить обработку результата запроса.
   dezss
 
9 - 21.02.18 - 16:43
(8) 2) а как может исказить обработку результата?
   dezss
 
10 - 21.02.18 - 16:46
(9) + у меня, например, данные меняются до запроса, а потом запросом выбираются эти измененные. (все это в транзакции)
 
 Рекламное место пустует
   H A D G E H O G s
 
11 - 21.02.18 - 16:46
Чтобы обойти проблему 1 в автоматическом режиме в запросе есть оператор ДЛЯИЗМЕНЕНИЯ, который меняет S блокировку на X блокировку на этапе Запроса.

Чтобы обойти проблему 2 и 3 в управляемом режиме есть Объект БлокировкаДанных, которая позволяет наложить X блокировку из кода 1С на уровне сервера 1C не опускаясь до уровня СУБД, ну, либо обработка результата Записать() постфактум и откат транзакции.
   H A D G E H O G s
 
12 - 21.02.18 - 16:48
(9) 1 транзакция выполнила запрос, s блокировка снята (read commited), либо не накладывалась (read commited snapshot), результат запроса сохранен в ТЗ или выборке, а в это время 2 транзакция сделала Записать(). В базе данные изменились, в ТЗ или выборке - нет.
   MM
 
13 - 21.02.18 - 16:51
(11) Не Х,а U - на SQL, хотя они и похожи.
   Fragster
 
14 - 21.02.18 - 16:51
(8) все прекрасно, но автор говорит, что у него один сеанс
   dezss
 
15 - 21.02.18 - 17:07
(12) а, понял...ты про "грязное" чтение
но это будет и без транзакции...
   Вафель
 
16 - 21.02.18 - 17:10
возможно в коде есть какойто алгоритм формирования движений через фоновые задания
   MM
 
17 - 21.02.18 - 17:19
(15) Это не грязное чтение, а более редкий случай. Например, одни и те же данные в начале проведения могут не совпадать с теми же данными в её конце, потому что другая транзакция в середине их изменяла, но при обоих чтениях данные зафиксированы в БД, т.е. чистые.
   dezss
 
18 - 21.02.18 - 17:31
(17) тупанул...не грязное, а неповторяющееся чтение...


Список тем форума
Рекламное место пустует Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует