|
Кто знает совместимы ли чтения из двух сеансов в транзакции? |
☑ |
0
Gorr
29.01.20
✎
11:47
|
Совместимы ли операции чтения из двух разныз сеансов в двух разных транзакциях при условии, что режим блокировок управляемый?
|
|
1
H A D G E H O G s
29.01.20
✎
11:53
|
Да
|
|
2
pechkin
29.01.20
✎
11:53
|
если блокировка исключительная, то нет
|
|
3
pechkin
29.01.20
✎
11:54
|
если блокировок не ставил, то с чего бы они были не совместимы
|
|
4
fisher
29.01.20
✎
12:04
|
(0) Даже в автоматическом режиме блокировок совместимы, если в запросе не используется ключевое слово "ДЛЯ ИЗМЕНЕНИЯ"
|
|
5
fisher
29.01.20
✎
12:07
|
Основная плюшка управляемых блокировок - возможность максимально параллельно писать.
|
|
6
DrWatson
29.01.20
✎
12:07
|
В управляемом режиме чтение даже с записью могут быть совместимы, если не файловая.
|
|
7
Gorr
29.01.20
✎
12:15
|
Поправлю вопрос совместимы ли чтение и запись из разных транзакций?
Например, первая транзакция прочитала, вторая прочитала.
Сможет ли после этого первая выполнить запись обе транзакции не завершились?
Насколько знаю в автоматическом режиме такое невозможно.
|
|
8
pechkin
29.01.20
✎
12:16
|
чтение не накладывает блокировки до конца транзакции
|
|
9
pechkin
29.01.20
✎
12:17
|
поэтому если движения зависят от прочитанных данных, то ВНАЧАЛЕ ставят исключительную блокировку
|
|
10
pechkin
29.01.20
✎
12:17
|
до чтения
|
|
11
DrWatson
29.01.20
✎
12:20
|
(7) клиент-сервер - да. Файловая - нет.
|
|
12
Жан Пердежон
29.01.20
✎
12:28
|
(7) сможет, если вторая не наложила блокировку на тот же самый объект данных
|
|
13
fisher
29.01.20
✎
13:20
|
(7) В автоматическом - да, невозможно. Там используется максимальный уровень изоляции транзакций СУБД, который это не позволит.
В управляемом режиме - возможно. В нем используется уровень изоляции транзакций READ COMMITED в СУБД, в котором чтение данных не мешает записи этих данных в параллельной транзакций.
А вот обратная ситуация хитрее. Если в СУБД применяется MVCC (версионирование при записи), то и запись данных в одной транзакции не мешает их чтению в другой транзакции (будет прочитана старая версия данных).
А вот если СУБД работает в режиме "блокировочника", то после записи в одной транзакции прочитать их в другой транзакции уже не получится.
Но для последних версий платформы и MSSQL база работает в режиме MVCC, а в постгресе оно из коробки. Так что эта экзотика в 1С остается разве что для IBM DB2
|
|
14
fisher
29.01.20
✎
13:26
|
Про оракл забыл. Про него точно не скажу. Но он вроде давно гибридным был, так что наверное там тоже для 1С сейчас MVCC используется.
|
|
15
Gorr
29.01.20
✎
14:04
|
(14) версионник
|
|
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший