|
set transaction snapshot table stability: не понимаю поведение сессий при DML
|
|||
---|---|---|---|
#18+
hi all. Сначала - пример с INSERT'ами, три сеанса: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
бНОПНЯ-1. А почему, соб-сно, сеансы 2 и 3 не обломались ? Ведь когда таблица была уже изменена транзакцией сеанса-1 (пусть еще и не закоммиченной), никакие другие транзакции с TIL = table stability *не* должны иметь возможности вносить изменения в эту таблицу. Дока гласит: langref30.pdf страница 431 ... после старта такой транзакции в других клиентских транзакциях невозможно выполнение изменений ни в каких таблицах этой базы данных. Все такие попытки в параллельных процессах приведут к исключениям базы данных Теперь - пример с UPDATE, тоже три сеанса (в предположении, что в таблице уже есть три строки, с id = 1, 2 & 3. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
бНОПНЯ-2. Почему сеанс-2 получил облом после того, как сеанс-1 отменил свою транзакцию ? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2015, 13:02 |
|
set transaction snapshot table stability: не понимаю поведение сессий при DML
|
|||
---|---|---|---|
#18+
Таблоид, у тебя старая версия доки. Я по этому поводу что-то правил, по совету ДЕ. И до сих пор не уверен, что там всё правильно написано. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2015, 13:04 |
|
set transaction snapshot table stability: не понимаю поведение сессий при DML
|
|||
---|---|---|---|
#18+
Симонов Денис, вот что СЕЙЧАС сидит в доке (только что скачал):pg. 443 Уровень изолированности SNAPSHOT TABLE STABILITY Уровень изоляции транзакции SNAPSHOT TABLE STABILITY позволяет, как и в случае SNAPSHOT, также видеть только те изменения, фиксация которых произошла не позднее момента старта этой транзакции. При этом после старта такой транзакции в других клиентских транзакциях невозможно выполнение изменений ни в каких таблицах этой базы данных, уже каким-либо образом измененных первой транзакцией. Все такие попытки в параллельных транзакциях приведут к исключениям базы данных. Просматривать любые данные другие транзакции могут совершенно свободно. При помощи предложения резервирования (RESERVING) можно разрешить другим транзакциям изменять данные в некоторых таблицах. Если на момент старта клиентом транзакции с уровнем изоляции SNAPSHOT TABLE STABILITY какая-нибудь другая транзакция выполнила неподтверждённое изменение данных любой таблицы базы данных, то запуск транзакции с таким уровнем изоляции приведёт к ошибке базы данных. Синенькое вызывает смутные сомнения (в том, что это утверждение истинно). Красненькое вызывает тревогу: я НЕ вижу, чтобы сеансы 2 и 3 обламывались в стартах своих транзакций с этим TIL. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2015, 13:14 |
|
set transaction snapshot table stability: не понимаю поведение сессий при DML
|
|||
---|---|---|---|
#18+
Таблоид, да, красненькое неверно. без явного резервирования snapshot table stability конечно стартанет. Ошибка будет только при попытке доступа к уже заблокированной таблице. И синенькое неверно. чего это вдруг просто старт транзакции без резервирования приведет к блокированию всех таблиц? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2015, 13:21 |
|
set transaction snapshot table stability: не понимаю поведение сессий при DML
|
|||
---|---|---|---|
#18+
kdv, там про всех и не написано. автор уже каким-либо образом измененных первой транзакцией. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2015, 13:29 |
|
set transaction snapshot table stability: не понимаю поведение сессий при DML
|
|||
---|---|---|---|
#18+
kdvчего это вдруг просто старт транзакции без резервирования приведет к блокированию всех таблиц?гы... а с кляузой 'reserving' - вообще веселуха получается: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37.
Ы ?! ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2015, 13:35 |
|
set transaction snapshot table stability: не понимаю поведение сессий при DML
|
|||
---|---|---|---|
#18+
Таблоид Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2015, 13:37 |
|
set transaction snapshot table stability: не понимаю поведение сессий при DML
|
|||
---|---|---|---|
#18+
Таблоидset transaction snapshot table stability reserving test; резервирование имеет 4 опции - shared_read, shared_write, protected_read, protected_write. Поскольку в "reserving test" вид резервирования не указан, то я предполагаю что там максимум shared_write, что дает возможность ДРУГИМ транзакциям stability reserving test стартовать. Вот если начать указывать protected, тогда конкурирующие будут обламываться при старте. Вопрос этот сложный, как минимум, процитирую себя www.ibase.ru/devinfo/ibtrans.htm Резервирование таблиц. "Есть еще один интересный момент. Проверяя режимы транзакций я обнаружил, что если одна транзакция consistency блокирует таблицу в режиме shared_write, то другая транзакция consistency при попытке открыть таблицу в режиме shared_read "повиснет" (именно в момент открытия таблицы). В то же время попытка открыть эту же таблицу в режиме shared_write завершается полным успехом." Симонов Денистам про всех и не написано. да, виноват, невнимательно прочитал. в "синеньком" вроде все норм. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2015, 14:25 |
|
set transaction snapshot table stability: не понимаю поведение сессий при DML
|
|||
---|---|---|---|
#18+
kdvВопрос этот сложный, как минимум, процитирую себя... 8 лет назад пытался в этом разобраться, да так и не довел до конца - тынц . Там сошлись, что статья не совсем верна, но уже не помню, в чем именно :) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2015, 20:01 |
|
|
start [/forum/topic.php?fid=40&fpage=72&tid=1562654]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
others: | 304ms |
total: | 435ms |
0 / 0 |