Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Согласованное чтение в read commited и промежуточная сборка мусора / 25 сообщений из 49, страница 1 из 2
04.07.2018, 18:10
    #39669640
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласованное чтение в read commited и промежуточная сборка мусора
Читаю описание 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 или запускать рестарт?
...
Рейтинг: 0 / 0
04.07.2018, 18:28
    #39669651
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласованное чтение в read commited и промежуточная сборка мусора
Симонов ДенисПочему решили именно так обрабатывать конфликты обновлений в READ COMMITTED READ CONSISTENCY.

Потому что это работает для Оракула. Хотя и создаёт забавные спецэффекты со срабатыванием
триггеров.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.07.2018, 19:42
    #39669669
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласованное чтение в read commited и промежуточная сборка мусора
Dimitry Sibiryakov,

про рестарты Оракла я в курсе. Мне интересно почему нельзя дать выбор как обрабатывать конфликт обновлений.
...
Рейтинг: 0 / 0
04.07.2018, 20:36
    #39669705
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласованное чтение в read commited и промежуточная сборка мусора
Симонов Денис,

я тоже хотел сделать рестарт опциональным. Но Николай меня переубедил.
Или я его не смог убедить :)

Можешь привести хороший пример, когда рестарт точно не нужен ?
...
Рейтинг: 0 / 0
04.07.2018, 21:48
    #39669729
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласованное чтение в read commited и промежуточная сборка мусора
Симонов ДенисЯ согласен что в большинстве случаев когда пользователь нарывается на конфликт обновлений,
он скорее всего попытается проделать тоже самое после завершения конкурирующей транзакции,
но далеко не всегда.

Вот тут ключевые слова "после завершения конкурирующей транзакции". Но, насколько я понял
из описания, новый код не будет ждать. Он сразу откатит и сразу повторит. И если мешающая
транзакция так и не закончилась, то будет долбиться до посинения. Очень надеюсь, что я,
как обычно, ошибаюсь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.07.2018, 21:49
    #39669730
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласованное чтение в read commited и промежуточная сборка мусора
hvladМожешь привести хороший пример, когда рестарт точно не нужен ?

Дедлок, когда две транзакции наталкиваются на изменения друг друга.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.07.2018, 22:17
    #39669742
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласованное чтение в read commited и промежуточная сборка мусора
hvlad,

Хороший пока в голову не приходит.
Это зависит от бизнес-логики. Далеко не всегда необходимо чтобы мои изменения перетерали чужие и я об этом был даже не в курсе. Возможно если я увижу конфликт я вообще не стану делать повторный UPDATE.
...
Рейтинг: 0 / 0
04.07.2018, 22:26
    #39669743
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласованное чтение в read commited и промежуточная сборка мусора
Симонов ДенисЭто зависит от бизнес-логики. Далеко не всегда необходимо чтобы мои изменения перетерали
чужие и я об этом был даже не в курсе.

Тогда read committed это не тот уровень, который тебе нужен.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.07.2018, 22:39
    #39669745
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласованное чтение в read commited и промежуточная сборка мусора
Dimitry Sibiryakov,

ну впрочем да. Я всегда могу повысить до concurency. Забыл что по стандарту RC допускает потерю обновлений.
Тогда понятно почему через рестарты сделали.
...
Рейтинг: 0 / 0
04.07.2018, 23:18
    #39669749
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласованное чтение в read commited и промежуточная сборка мусора
Dimitry SibiryakovhvladМожешь привести хороший пример, когда рестарт точно не нужен ?

Дедлок, когда две транзакции наталкиваются на изменения друг друга.Дедлок - это не конфликт обновления. И выше ты ошибаешься
...
Рейтинг: 0 / 0
04.07.2018, 23:22
    #39669750
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласованное чтение в read commited и промежуточная сборка мусора
Симонов ДенисДалеко не всегда необходимо чтобы мои изменения перетерали чужие и я об этом был даже не в курсеЧто значит - не в курсе ? Конфликт обновления как раз об этом тебе и говорит.
Ну а чтобы не перетереть чужое - пиши в WHERE правильные условия :)
...
Рейтинг: 0 / 0
04.07.2018, 23:29
    #39669751
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласованное чтение в read commited и промежуточная сборка мусора
hvlad,

так если будет автоматически запускаться рестарт, то я никогда этих конфликтов не увижу. Разве нет?
...
Рейтинг: 0 / 0
04.07.2018, 23:33
    #39669752
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласованное чтение в read commited и промежуточная сборка мусора
Симонов Денисhvlad,

так если будет автоматически запускаться рестарт, то я никогда этих конфликтов не увижу. Разве нет?Не увидишь. Если update\delete правильно написан, то никто ничего не перетрёт.
...
Рейтинг: 0 / 0
04.07.2018, 23:36
    #39669753
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласованное чтение в read commited и промежуточная сборка мусора
hvlad,

кстати как оно там взаимодействует с SELECT * ... WITH LOCK?
...
Рейтинг: 0 / 0
04.07.2018, 23:38
    #39669754
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласованное чтение в read commited и промежуточная сборка мусора
Симонов Денис,

так же :)
...
Рейтинг: 0 / 0
05.07.2018, 00:30
    #39669761
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласованное чтение в read commited и промежуточная сборка мусора
hvladИ выше ты ошибаешься

То есть одна из транзакций всё же подождёт завершения конкурента прежде чем повторить
update на 100500 записей?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.07.2018, 01:17
    #39669764
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласованное чтение в read commited и промежуточная сборка мусора
Dimitry Sibiryakov,

ещё раз - дедлок и апдейт-конфликт - разные ошибки.
Рестарт будет только при второй из них.
...
Рейтинг: 0 / 0
05.07.2018, 01:19
    #39669766
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласованное чтение в read commited и промежуточная сборка мусора
Симонов Денистак если будет автоматически запускаться рестарт, то я никогда этих конфликтов не увижу. Разве нет?Забыл добавить - если напишешь обработчик ошибки (в PSQL блоке) - увидишь.
...
Рейтинг: 0 / 0
05.07.2018, 09:01
    #39669808
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласованное чтение в read commited и промежуточная сборка мусора
Правильно ли я все понял???

----------------------
Первый
Транзакция RC
UPDATE записи

Второй
Транзакция RC
UPDATE той-же записи
нарывается на апдейт-конфликт
и этот UPDATE будет молча перезапущен
(неважно сразу или после ожидания завершения первой транзакции)
----------------------
Если это так то у меня будут проблемы
ибо сейчас некоторая работа построена по схеме:
Транзакции RC
связка таблиц мастер-деталь (по сути это таблицы документов, с шапкой и строками)
перед получением доступа к документу делается
UPDATE мастера
если он прошел успешно то пользователь получает доступ к документу ну и делает с ним то что надо, может это делать долго, очень долго
если нарвался на апдейт-конфликт то получает сообщение что документ занят
и "успокаивается"
----------------------
Теперь-же получается что никакого сообщения он не получит и для него будет полная иллюзия того что программа зависла.
???
...
Рейтинг: 0 / 0
05.07.2018, 09:53
    #39669834
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласованное чтение в read commited и промежуточная сборка мусора
m7m,

не должно такого быть.
Если конкурент активен, то первичным кодом ошибки будет isc_deadlock, и никаких рестартов не будет.
Но я это ещё проверю дополнительно.
...
Рейтинг: 0 / 0
05.07.2018, 11:35
    #39669921
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласованное чтение в read commited и промежуточная сборка мусора
hvladещё раз - дедлок и апдейт-конфликт - разные ошибки.
Рестарт будет только при второй из них.

Поясняю на пальцах: в результате разных планов и фазы Луны запрос в транзакции 1 обновляет
сначала запись 1, потом запись 2, в то время как запрос в транзакции 2 обновляет сначала
запись 2, потом запись 1. Кто кого переборет и кто когда будет откатываться?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.07.2018, 11:57
    #39669948
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласованное чтение в read commited и промежуточная сборка мусора
Dimitry Sibiryakov,

это - дедлок, рестарта не будет. Ничего нового.
...
Рейтинг: 0 / 0
05.07.2018, 12:27
    #39669972
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласованное чтение в read commited и промежуточная сборка мусора
Давайте ещё раз уточним - рестарт имеет смысл только в том случае, когда тр-ция-конкурент уже не активна.
Если она активна, то выдаётся обычное сообщение о конфликте в котором первичный код ошибки - isc_deadlock и только вторичная ошибка будет isc_update_conflict.
Если же тр-ция-конкурент не активна, то делается рестрат запроса в новом снимке.
В коде сейчас прописано 10 попыток рестрата, после 10-ой будет выдана isc_update_conflict (без isc_deadlock).

Есть сомнения\возражения ?
...
Рейтинг: 0 / 0
05.07.2018, 13:09
    #39669997
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласованное чтение в read commited и промежуточная сборка мусора
hvlad,

спасибо за разъяснения
...
Рейтинг: 0 / 0
05.07.2018, 13:33
    #39670016
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласованное чтение в read commited и промежуточная сборка мусора
hvladДавайте ещё раз уточним - рестарт имеет смысл только в том случае, когда тр-ция-конкурент уже не активна.
Если она активна, то выдаётся обычное сообщение о конфликте в котором первичный код ошибки - isc_deadlock и только вторичная ошибка будет isc_update_conflict.
Если же тр-ция-конкурент не активна, то делается рестрат запроса в новом снимке.
В коде сейчас прописано 10 попыток рестрата, после 10-ой будет выдана isc_update_conflict (без isc_deadlock).


это именно то чего я в описании не увидел, отсюда и возник вопрос.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Согласованное чтение в read commited и промежуточная сборка мусора / 25 сообщений из 49, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]