|
Согласованное чтение в 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 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
hvladДавайте ещё раз уточним - рестарт имеет смысл только в том случае, когда тр-ция-конкурент уже не активна. Если она активна, то выдаётся обычное сообщение о конфликте в котором первичный код ошибки - isc_deadlock и только вторичная ошибка будет isc_update_conflict. Если же тр-ция-конкурент не активна, то делается рестрат запроса в новом снимке. В коде сейчас прописано 10 попыток рестрата, после 10-ой будет выдана isc_update_conflict (без isc_deadlock). Есть сомнения\возражения ? Ну вот теперь в голове у меня все стало на свои места :) Спасибо за пояснения!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2018, 16:04 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
hvladЕсть сомнения\возражения ? На мой вкус 10 повторов это лишка, хватило бы и одного-двух. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2018, 00:21 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovНа мой вкус 10 повторов это лишка, хватило бы и одного-двух.Я же просил сомнения\возражения, а не брюзжание :) Понятно, что 10 повторов - это слишком. Просто нужно было какой-то ограничитель поставить, на тот случай, которого "не может быть". Это можно будет изменить до релиза, при необходимости. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2018, 01:16 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
А повторы с каким-то интервалом идут? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2018, 07:43 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
Exteris, С разумным интервалом! ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2018, 09:02 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
ExterisА повторы с каким-то интервалом идут?Пауза не нужна, т.к. известно, что тр-ция конкурент уже не активна - ждать нечего. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2018, 09:25 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
Хм, тогда действительно 10 повторов - многовато. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2018, 09:35 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
Exteris, это на случай наша транзакция мега длительная, а пока она выполняется завершаются 10 и более коротких, причём старт-коммиты должны ещё и не удачно попасть до рестарта и каждый раз после рестарта. Конечно сценарий маловероятный, но мало ли ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2018, 09:44 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
кстати. Может вопрос немного не в тему, но мало ли есть связь. Планируется ли сделать так чтобы запросы к MON$ вели себя по разному в зависимости от уровня изолированности транзакции? Раньше вроде RC был не очень пригоден поэтому для MON$ всегда работал SNAPSHOT, а теперь вроде как доступна консистентная информация на уровне запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2018, 09:54 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
Симонов Денис, ошибаешься. независимо от уровня изолированности информация в mon$ всегда собирается как снимок (snapshot не по уровню изолированности), потому что иначе в RC невозможно согласованное получение данных из связанных таблиц. Как раз самое правильное - получение mon$ в read read committed. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2018, 10:49 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
kdv, так оно и так в новом RC снимок. Вот только для обновления информации в MON$ сейчас надо перезапускать транзакцию, а для ряда случаев достаточно было бы просто перевыполнить запрос. Т.е. можно было бы менять поведения в зависимости от того где запрашивается информация из MON$ в RC или SNAPSHOT ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2018, 11:01 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
Симонов Денис, да ну нафиг. Если ты лезешь в mon$statements, то тебе потом явно захочется посмотреть в mon$attachments, или в mon$transactions. А если они в RC, то 1. получить консистентные данные получится только джойном 2. всё равно с производительностью будет плохо, потому что запрос к одной таблице опять потребует сканирования состояния всех коннектов. 3. вычитка mon$ в режиме RC предполагает их частое "дрюкание". См. пункт 2. Этот вопрос обсуждался еще когда mon$ делались. Разработчики решили делать снапшот, читаемый в любой транзакции. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2018, 11:08 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
hvladЯ же просил сомнения\возражения, а не брюзжание :) Это и есть сомнение: если сейчас длинный апдейт валится через пару минут с ошибкой конфликта, то с десятью повторами его время выполнения будет колебаться от двух до 20 минут в зависимости от фазы Луны. Если не будет простого способа обнаружить наличие рестартов, это создаст ещё одну трудно диагностируемую проблему производительности для поддержки. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2018, 11:48 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovЕсли не будет простого способа обнаружить наличие рестартов, это создаст ещё одну трудно диагностируемую проблему производительности для поддержки.Я же писал выше. Хочешь ловить рестарты - делай обработчик ошибки в PSQL блоке ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2018, 12:08 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
hvladЯ же писал выше. Хочешь ловить рестарты - делай обработчик ошибки в PSQL блоке Ты думаешь как разработчик, который пишет код. Попробуй для разнообразия подумать как работник техподдержки, которому клиент жалуется на "update долго работает". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2018, 12:12 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Такая ситуация потенциально может быть если ты только обновляешь не меньше миллиона строк. Это и без всяких рестартов будет больно ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2018, 12:16 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
Симонов ДенисТакая ситуация потенциально может быть если ты только обновляешь не меньше миллиона строк. Тот же S-Market способен регулярно обновлять и по пять миллионов записей одним махом. Качество разработчиков софта в мире не растёт. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2018, 12:39 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, и что одновременно эти 5 миллионов кто-то ещё правит? Ну предположим правит, вот будет облом апдейту, запустят его снова с клиента. Что будет быстрее что ли? Вроде эта одна из тех операций которая должна завершится в любом случае. А вот диагностика конечно нужна. Можно например ввести в MON$STATEMENTS счётчик рестартов ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2018, 12:44 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovhvladЯ же писал выше. Хочешь ловить рестарты - делай обработчик ошибки в PSQL блоке Ты думаешь как разработчик, который пишет код. Попробуй для разнообразия подумать как работник техподдержки, которому клиент жалуется на "update долго работает".Рестарт делает движок, или рестарт делает само приложение - в чём разница для техподдержки ? У тебя есть способ обеспечить ему счастье ? Рассказывай, подумаем. Для разнообразия ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2018, 12:45 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
Симонов Денис, точнее в MON$RECORD_STATS ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2018, 13:03 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovТот же S-Market способен регулярно обновлять и по пять миллионов записей одним махом. Качество разработчиков софта в мире не растёт. Это же обработка данных за промежуток времени, остатки, продажи и т.п. Не мешай в одну кучу. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2018, 13:13 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
hvlad, в RDB$TYPES для MON$ISOLATION_MODE забыли добавить 4 - READ_CONSISTENCY ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2018, 13:19 |
|
Согласованное чтение в read commited и промежуточная сборка мусора
|
|||
---|---|---|---|
#18+
точнее READ_COMMITED_CONSISTENCY. Ну вам виднее как назвать ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2018, 13:20 |
|
|
start [/forum/topic.php?all=1&fid=40&tid=1561028]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
64ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 178ms |
0 / 0 |