|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
Читаю описание https://github.com/red-soft-ru/firebird/blob/read_consistency/doc/README.read_consistency.md Всё круто. Но хотелось бы пояснений в некоторых моментах. Update conflicts handlingWhen statement executed within read committed read consistency transaction its database view is not changed (similar to snapshot transaction). Therefore it is useless to wait for commit of concurrent transaction in the hope to re-read new committed record version. Similarly, engine doesn't wait and re-read record when update conflict happens. Instead, engine undoes all work done up to top-level statement, creates new snapshot and restart top-level statement execution. This is the same logic as user applications uses for update conflict handling usually, but it is a bit more efficient as it excludes network roundtrips to\from client host. This restart logic is not applied to the selectable stored procedures if update conflict happens after any record returned to the client application. In this case isc_update_conflict error is returned. Почему решили именно так обрабатывать конфликты обновлений в READ COMMITTED READ CONSISTENCY. Я согласен что в большинстве случаев когда пользователь нарывается на конфликт обновлений, он скорее всего попытается проделать тоже самое после завершения конкурирующей транзакции, но далеко не всегда. Может всё таки ввести дополнительные параметры транзакции, которые позволяют решить бросать ли ошибку isc_update_conflict или запускать рестарт? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2018, 18:10 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
Симонов ДенисПочему решили именно так обрабатывать конфликты обновлений в READ COMMITTED READ CONSISTENCY. Потому что это работает для Оракула. Хотя и создаёт забавные спецэффекты со срабатыванием триггеров. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2018, 18:28 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, про рестарты Оракла я в курсе. Мне интересно почему нельзя дать выбор как обрабатывать конфликт обновлений. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2018, 19:42 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
Симонов Денис, я тоже хотел сделать рестарт опциональным. Но Николай меня переубедил. Или я его не смог убедить :) Можешь привести хороший пример, когда рестарт точно не нужен ? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2018, 20:36 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
Симонов ДенисЯ согласен что в большинстве случаев когда пользователь нарывается на конфликт обновлений, он скорее всего попытается проделать тоже самое после завершения конкурирующей транзакции, но далеко не всегда. Вот тут ключевые слова "после завершения конкурирующей транзакции". Но, насколько я понял из описания, новый код не будет ждать. Он сразу откатит и сразу повторит. И если мешающая транзакция так и не закончилась, то будет долбиться до посинения. Очень надеюсь, что я, как обычно, ошибаюсь. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2018, 21:48 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
hvladМожешь привести хороший пример, когда рестарт точно не нужен ? Дедлок, когда две транзакции наталкиваются на изменения друг друга. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2018, 21:49 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
hvlad, Хороший пока в голову не приходит. Это зависит от бизнес-логики. Далеко не всегда необходимо чтобы мои изменения перетерали чужие и я об этом был даже не в курсе. Возможно если я увижу конфликт я вообще не стану делать повторный UPDATE. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2018, 22:17 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
Симонов ДенисЭто зависит от бизнес-логики. Далеко не всегда необходимо чтобы мои изменения перетерали чужие и я об этом был даже не в курсе. Тогда read committed это не тот уровень, который тебе нужен. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2018, 22:26 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, ну впрочем да. Я всегда могу повысить до concurency. Забыл что по стандарту RC допускает потерю обновлений. Тогда понятно почему через рестарты сделали. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2018, 22:39 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovhvladМожешь привести хороший пример, когда рестарт точно не нужен ? Дедлок, когда две транзакции наталкиваются на изменения друг друга.Дедлок - это не конфликт обновления. И выше ты ошибаешься ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2018, 23:18 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
Симонов ДенисДалеко не всегда необходимо чтобы мои изменения перетерали чужие и я об этом был даже не в курсеЧто значит - не в курсе ? Конфликт обновления как раз об этом тебе и говорит. Ну а чтобы не перетереть чужое - пиши в WHERE правильные условия :) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2018, 23:22 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
hvlad, так если будет автоматически запускаться рестарт, то я никогда этих конфликтов не увижу. Разве нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2018, 23:29 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
Симонов Денисhvlad, так если будет автоматически запускаться рестарт, то я никогда этих конфликтов не увижу. Разве нет?Не увидишь. Если update\delete правильно написан, то никто ничего не перетрёт. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2018, 23:33 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
hvlad, кстати как оно там взаимодействует с SELECT * ... WITH LOCK? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2018, 23:36 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
Симонов Денис, так же :) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2018, 23:38 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
hvladИ выше ты ошибаешься То есть одна из транзакций всё же подождёт завершения конкурента прежде чем повторить update на 100500 записей? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2018, 00:30 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, ещё раз - дедлок и апдейт-конфликт - разные ошибки. Рестарт будет только при второй из них. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2018, 01:17 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
Симонов Денистак если будет автоматически запускаться рестарт, то я никогда этих конфликтов не увижу. Разве нет?Забыл добавить - если напишешь обработчик ошибки (в PSQL блоке) - увидишь. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2018, 01:19 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
Правильно ли я все понял??? ---------------------- Первый Транзакция RC UPDATE записи Второй Транзакция RC UPDATE той-же записи нарывается на апдейт-конфликт и этот UPDATE будет молча перезапущен (неважно сразу или после ожидания завершения первой транзакции) ---------------------- Если это так то у меня будут проблемы ибо сейчас некоторая работа построена по схеме: Транзакции RC связка таблиц мастер-деталь (по сути это таблицы документов, с шапкой и строками) перед получением доступа к документу делается UPDATE мастера если он прошел успешно то пользователь получает доступ к документу ну и делает с ним то что надо, может это делать долго, очень долго если нарвался на апдейт-конфликт то получает сообщение что документ занят и "успокаивается" ---------------------- Теперь-же получается что никакого сообщения он не получит и для него будет полная иллюзия того что программа зависла. ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2018, 09:01 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
m7m, не должно такого быть. Если конкурент активен, то первичным кодом ошибки будет isc_deadlock, и никаких рестартов не будет. Но я это ещё проверю дополнительно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2018, 09:53 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
hvladещё раз - дедлок и апдейт-конфликт - разные ошибки. Рестарт будет только при второй из них. Поясняю на пальцах: в результате разных планов и фазы Луны запрос в транзакции 1 обновляет сначала запись 1, потом запись 2, в то время как запрос в транзакции 2 обновляет сначала запись 2, потом запись 1. Кто кого переборет и кто когда будет откатываться? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2018, 11:35 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, это - дедлок, рестарта не будет. Ничего нового. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2018, 11:57 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
Давайте ещё раз уточним - рестарт имеет смысл только в том случае, когда тр-ция-конкурент уже не активна. Если она активна, то выдаётся обычное сообщение о конфликте в котором первичный код ошибки - isc_deadlock и только вторичная ошибка будет isc_update_conflict. Если же тр-ция-конкурент не активна, то делается рестрат запроса в новом снимке. В коде сейчас прописано 10 попыток рестрата, после 10-ой будет выдана isc_update_conflict (без isc_deadlock). Есть сомнения\возражения ? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2018, 12:27 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
hvlad, спасибо за разъяснения ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2018, 13:09 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
hvladДавайте ещё раз уточним - рестарт имеет смысл только в том случае, когда тр-ция-конкурент уже не активна. Если она активна, то выдаётся обычное сообщение о конфликте в котором первичный код ошибки - isc_deadlock и только вторичная ошибка будет isc_update_conflict. Если же тр-ция-конкурент не активна, то делается рестрат запроса в новом снимке. В коде сейчас прописано 10 попыток рестрата, после 10-ой будет выдана isc_update_conflict (без isc_deadlock). это именно то чего я в описании не увидел, отсюда и возник вопрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2018, 13:33 |
|
|
start [/forum/topic.php?fid=40&msg=39669997&tid=1561028]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 159ms |
0 / 0 |