|
Почему происходит конфликт блокировок при такой схеме? | ☑ | ||
---|---|---|---|---|
0
toypaul
гуру
21.02.18
✎
16:01
|
НачатьТранзакцию
Запрос.Выполнить("Тут запрос по регистру, по которому конфликт") ДокОб.Записать(Проведени) //вот тут конфликт ЗафиксироватьТранзакию или такая схема НачатьТранзакцию БлокировкаДанных.Заблокировать() //блокировка по регистру ДокОб.Записать(Проведени) //вот тут конфликт которые выше был заблокирован ЗафиксироватьТранзакию Вроде как получается что транзакция проведения (записи) не видит транзакцию, которая выше и получается конфликт? В 1й схеме вынес запрос за 1ю транзакцию и все норм стало. Код не мой. Просили разобраться почему не работает. |
|||
1
Вафель
21.02.18
✎
16:03
|
переходи на упр блокировки
|
|||
2
Fragster
гуру
21.02.18
✎
16:03
|
в одном сеансе не бывает конфликтов блокировок
|
|||
3
toypaul
гуру
21.02.18
✎
16:05
|
(2) сфига ли не бывает. когда конфликт это разные транзакции а не сеанс.
|
|||
4
Fragster
гуру
21.02.18
✎
16:09
|
сеанс в 1с однопоточный
|
|||
5
toypaul
гуру
21.02.18
✎
16:19
|
(4) и чо. нельзя сделать одновременно 2 транзакции что ли?
я вот не 1й раз уже сталкиваюсь когда начатьтранзакцию тут запрос к регистру или каким-то данным объектам тут запись или проведени и все = привет конфликт блокировок зафиксироватьтранзакцию() если сделать так тут запрос к регистру или каким-то данным объектам начатьтранзакцию тут запись или проведение, то все норм зафиксироватьтранзакцию |
|||
6
H A D G E H O G s
21.02.18
✎
16:21
|
Вам бы почитать мануалов.
|
|||
7
toypaul
гуру
21.02.18
✎
16:25
|
да я сам знаю что надо почитать. будет время почитаю
|
|||
8
H A D G E H O G s
21.02.18
✎
16:39
|
Когда запрос выносим за транзакцию - на уровне СУБД режим изоляции - Uncommited Read, который снимается как только запрос закончится.
Когда запрос вносим в транзакцию - на уровне СУБД режим изоляции 1) RepeatableRead с S блокировкой до конца транзакции при автоматических блокировках, которая дает взаимоблокировку с X блокировкой Записать(). 2) ReadCommited с S блокировкой на момент выполнения запроса при управляемых блокировках, которая не даст взаимоблокировку с X блокировкой Записать() но может исказить обработку результата запроса. 3) ReadCommited snapshot в 8.3 без блокировок на момент выполнения запроса при управляемых блокировках, которая не даст взаимоблокировку с X блокировкой Записать() но может исказить обработку результата запроса. |
|||
9
dezss
21.02.18
✎
16:43
|
(8) 2) а как может исказить обработку результата?
|
|||
10
dezss
21.02.18
✎
16:46
|
(9) + у меня, например, данные меняются до запроса, а потом запросом выбираются эти измененные. (все это в транзакции)
|
|||
11
H A D G E H O G s
21.02.18
✎
16:46
|
Чтобы обойти проблему 1 в автоматическом режиме в запросе есть оператор ДЛЯИЗМЕНЕНИЯ, который меняет S блокировку на X блокировку на этапе Запроса.
Чтобы обойти проблему 2 и 3 в управляемом режиме есть Объект БлокировкаДанных, которая позволяет наложить X блокировку из кода 1С на уровне сервера 1C не опускаясь до уровня СУБД, ну, либо обработка результата Записать() постфактум и откат транзакции. |
|||
12
H A D G E H O G s
21.02.18
✎
16:48
|
(9) 1 транзакция выполнила запрос, s блокировка снята (read commited), либо не накладывалась (read commited snapshot), результат запроса сохранен в ТЗ или выборке, а в это время 2 транзакция сделала Записать(). В базе данные изменились, в ТЗ или выборке - нет.
|
|||
13
MM
21.02.18
✎
16:51
|
(11) Не Х,а U - на SQL, хотя они и похожи.
|
|||
14
Fragster
гуру
21.02.18
✎
16:51
|
(8) все прекрасно, но автор говорит, что у него один сеанс
|
|||
15
dezss
21.02.18
✎
17:07
|
(12) а, понял...ты про "грязное" чтение
но это будет и без транзакции... |
|||
16
Вафель
21.02.18
✎
17:10
|
возможно в коде есть какойто алгоритм формирования движений через фоновые задания
|
|||
17
MM
21.02.18
✎
17:19
|
(15) Это не грязное чтение, а более редкий случай. Например, одни и те же данные в начале проведения могут не совпадать с теми же данными в её конце, потому что другая транзакция в середине их изменяла, но при обоих чтениях данные зафиксированы в БД, т.е. чистые.
|
|||
18
dezss
21.02.18
✎
17:31
|
(17) тупанул...не грязное, а неповторяющееся чтение...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |