powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / О блокировках
22 сообщений из 22, страница 1 из 1
О блокировках
    #39977922
demon1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый.
Никак не могу понять, как fb разруливает апдейты одной и той же записи. (возможно плохо искал)
Так вот, периодически у меня вылезает проблема конфликта обновлений, параметры транзакций выставлены как rec_ver и wait.
Сегодня словил вышеописанную проблему, стартонула транзакция, которая делает апдейт записи, спустя секунду стартонула вторая транзакция, которая апдейтит ту же запись, что и первая. В итоге вторая тр завершилась, а первая откатилась с ошибкой конфликта обновлений.
Буду очень признателен, если кто-то разъяснит из-за чего происходит такая ситуация (fb 3.0.5 ss).
...
Рейтинг: 0 / 0
О блокировках
    #39977948
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чти: http://www.ibase.ru/transactions/
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
О блокировках
    #39977955
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
demon1992В итоге вторая тр завершилась, а первая откатилась с ошибкой конфликта обновлений.
Раз используется wait, тогда тут всё нормально. Потому что вторая-то сделала коммит, а первая "не успела" обновить,
и значит после коммита конкурента должна перечитать данные (если это не snapshot).
Вообще с Firebird wait если и надо, то в специфических случаях.
Лучше no wait, т.е. получать сообщения о конфликте обновлений сразу. Это не MS SQL, который изменения накатывает записывает по коммиту. В FB изменения идут сразу "по месту", а коммитом они только подтверждаются.

Кроме
http://www.ibase.ru/transactions/

если используете FIBPlus, FireDAC или подобные - то желательно прочитать и http://www.ibase.ru/ibx/
...
Рейтинг: 0 / 0
О блокировках
    #39977982
demon1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Статью читал, и ролик смотрел.
Я почему то всегда думал, что движок разруливает эти самые блокировки тем, что если обнаруживает незакоммиченные данные, новая транзакция не будет сразу вываливать ошибку, а будет пытаться сделать несколько попыток обновить запись.
Но я всё равно не понимаю, как в высоконагруженной системе с конкурентным доступом, работает без проблем, а потом раз в полгода вываливается ошибка конфликта обновлений.
...
Рейтинг: 0 / 0
О блокировках
    #39977989
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
demon1992
Но я всё равно не понимаю, как в высоконагруженной системе с конкурентным доступом, работает без проблем, а потом раз в полгода вываливается ошибка конфликта обновлений.
"Высоконагруженная" это сколько?
Тысячи роботов или сотни пользователей? А сотни пользователей работают как роботы или, всё-таки, менее интенсивно?
Ну и самое главное - вы, конечно, уже знаете, сколько времени занимает типичная транзакции и какова вероятность конфликта обновлений?
...
Рейтинг: 0 / 0
О блокировках
    #39977996
demon1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не роботы, но транзакций много, пишущая транзакция работает быстро, меньше секунды.
...
Рейтинг: 0 / 0
О блокировках
    #39977999
demon1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще у меня вопрос в другом: ждет ли движок какое-то время чтобы повторно накатить изменения, если натыкается на незакоммиченные данные?
И как так получилось, что тр2 обновила запись, при запущенной ранее тр1, которая так же обновляла ту самую запись что и тр2.
...
Рейтинг: 0 / 0
О блокировках
    #39978005
demon1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я немного не договорил еще. Запись обновляется процедурой, и перед выполнением есть еще исполняемый код. Могло ли получится так, что тр2 начала обновлять запись раньше чем тр1, и из-за этого и получить конфликт обновления? Если так, то это очень странно, в процедуре перед обновлением идет всего пару единичных селектов по индексу, там нет ничего такого что могло бы зависнуть, а разница между стартом транзакций 1.5 сек.
...
Рейтинг: 0 / 0
О блокировках
    #39978008
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
demon1992
Вообще у меня вопрос в другом: ждет ли движок какое-то время чтобы повторно накатить изменения, если натыкается на незакоммиченные данные?
Если он их увидел до того как начал читать запись, и если это READ COMMITTED NO RECORD VERSION тр-ция - ждёт
- если конкурент откатился - читаем и идём дальше,
- если конкурент подтвердился ещё активен, то выдаёт isc_read_conflict,
- если конкурент подтвердился - RC NRV тр-ция читает первичную версию.
Другие тр-ции не ждут и ищут видимую для них бекверсию.

Далее, если запись была нами прочитана, но была изменена конкурентом в промежутке между чтением и самим апдейтом, то снова ждём финального состояния конкурента (если мы READ COMMITTED) и
- если конкурент откатился - пишем свою версию,
- если конкурент ещё активен или подтвердился, то выдаём isc_update_conflict.

Это на пальцах, там больше деталей на самом деле.

PS В 4-ке на уровне READ COMMITTED READ CONSISTENCY алгоритм сложнее и может полностью исключить isc_update_conflict в большинстве случаев

PPS исправил немного
...
Рейтинг: 0 / 0
О блокировках
    #39978009
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
demon1992
И как так получилось, что тр2 обновила запись, при запущенной ранее тр1, которая так же обновляла ту самую запись что и тр2.
Если tx1 обновила запись и была comitted, то tx2 вполне может её менять. Если tx2 - RC, то неважно кто из них когда стартовал.
...
Рейтинг: 0 / 0
О блокировках
    #39978015
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
demon1992а будет пытаться сделать несколько попыток обновить запись
зачем это движку?
В общем, читать надо http://www.ibase.ru/mga/
и убирать wait из параметров транзакций.

"транзакций много" - сколько, миллион в сутки, два, пять?
...
Рейтинг: 0 / 0
О блокировках
    #39978020
demon1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvlad,

Спасибо за разъяснение.
...
Рейтинг: 0 / 0
О блокировках
    #39978022
demon1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv,

Бывает и 5 и 10 и 20.
...
Рейтинг: 0 / 0
О блокировках
    #39978030
Softologic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
demon1992,

Есть еще пара полезных видосов, помимо чтива:

[spoiler]
YouTube Video
...
Рейтинг: 0 / 0
О блокировках
    #39978046
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
demon1992
Бывает и 5 и 10 и 20.
20млн / 86400 ~= 232 транзакции в секунду.
С учётом того, что есть периоды пиковой активности, (вероятно) не все транзакции пишущие и далеко не все пишущие транзакции вообще могут конфликтовать - получаем, что вероятность конфикта "достаточно мала".
Собственно именно это и составляет корень проблемы "вот тут мы не будем делать правильно, но сложно": более простой вариант работает почти всегда.
...
Рейтинг: 0 / 0
О блокировках
    #39978088
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvзачем это движку?

Ну, в четвёрке что-то такое сделали...

kdvи убирать wait из параметров транзакций.

А вот это вопрос спорный. С одной стороны да, хорошо получать ошибку сразу. С другой
стороны естественная (и практически единственная вменяемая) реакция на эту ошибку -
откатить транзакцию, перечитать данные и попробовать снова. И вот тут-то хорошо бы таки
подождать пока конкурент завершится, иначе будем долбиться как дятлы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
О блокировках
    #39978101
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
kdvи убирать wait из параметров транзакций.

А вот это вопрос спорный.Согласен.
Если говорить о пар-рах тр-ции с точки зрения апдейтов, то тот, кто читал хотя бы 22165043 , не мог не заметить, что использование RC NRV
значительно сокращает вероятность конфликтов обновления. Особенно при не очень высокой конкуренции.
Но, конечно, не гарантирует их отсутствие.
Новый режим RC RC в 4-ке уменьшает эту вероятность почти до нуля.
...
Рейтинг: 0 / 0
О блокировках
    #39978173
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovреакция на эту ошибку - откатить транзакцию
это только если snapshot. там другого варианта и нет.
А с read committed вполне можно перечитать запись, и дальше решать - опять пытаться обновлять ее, или нет.
Dimitry SibiryakovНу, в четвёрке что-то такое сделали...
да нет там ничего такого.
...
Рейтинг: 0 / 0
О блокировках
    #39978182
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
Dimitry SibiryakovНу, в четвёрке что-то такое сделали...

да нет там ничего такого. https://github.com/FirebirdSQL/firebird/blob/master/doc/README.read_consistency.md

Читать до прояснения, особенно главу "Update conflicts handling"
...
Рейтинг: 0 / 0
О блокировках
    #39978187
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvс read committed вполне можно перечитать запись, и дальше решать - опять пытаться
обновлять ее, или нет.

А смысл это делать до того, как конкурент завершится?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
О блокировках
    #39978201
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovА смысл это делать до того, как конкурент завершится?..
как раз и проверять, завершился он или нет.
hvladЧитать до прояснения
да, действительно "долбит". Ну и ладно.
...
Рейтинг: 0 / 0
О блокировках
    #39978203
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
Dimitry SibiryakovА смысл это делать до того, как конкурент завершится?..

как раз и проверять, завершился он или нет.И как ты собрался это проверять ?


kdv
да, действительно "долбит". Ну и ладно.
Я же просил - до прояснения. Никто никого не "долбит". Дятлы давно все улетели ;)
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / О блокировках
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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