powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / update conflicts with concurrent update
14 сообщений из 14, страница 1 из 1
update conflicts with concurrent update
    #38763821
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Объясните, пожалуйста фразу
авторОдна транзакция стартует и модифицирует запись, и вторая пытается модифицировать ту же запись. Поскольку более одной не-committed версии для записи существовать не может, вторая транзакция получит сообщение:

deadlock. update conflicts with concurrent update.

У меня две транзакции модифицируют один и тот же набор данных. Обе транзакции read_commited, rec_version.

В моем понимании, что если две транзакции будут модифицировать одну и ту же запись, то вторая, т.к. нет флага nowait, просто будет ожидать пока не завершится первая. В основном так и получается, но иногда получаю ошибкуавторdeadlock. update conflicts with concurrent updateЧего я не понимаю?

С уважением, Vasilisk
...
Рейтинг: 0 / 0
update conflicts with concurrent update
    #38763826
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_вторая, т.к. нет флага nowait, просто будет ожидать пока не завершится
первая.
И если ты завершилась коммитом - выкинет ошибку, которую ты и наблюдаешь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
update conflicts with concurrent update
    #38763831
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovИ если ты завершилась коммитом - выкинет ошибку, которую ты и наблюдаешь.Твою дивизию. Спасибо большое.
...
Рейтинг: 0 / 0
update conflicts with concurrent update
    #38763858
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Твою дивизию.
Тут тебе не оракул, автоматические мини-откаты отсутствуют.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
update conflicts with concurrent update
    #38763873
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovТут тебе не оракул, автоматические мини-откаты отсутствуют.Все таки идея не совсем понятна. Ну полезли мы модифицировать запись, ну подождали. Но почему бы не отмодифицировать эту запись когда она разблокируется? Получается, что смысла убирать флаг nowait нет никакого? Он актуален только при Rollback?
...
Рейтинг: 0 / 0
update conflicts with concurrent update
    #38763874
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Но почему бы не отмодифицировать эту запись когда она разблокируется?

Чтобы не приходилось в саппорте отвечать на вопросы криворуких разработчиков о lost update.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
update conflicts with concurrent update
    #38763898
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
особо страждующие тихой перезаписи могут открыть для себя режим no_record_version. А может и заодно откроют сопутствующие ему нюансы :-)
...
Рейтинг: 0 / 0
update conflicts with concurrent update
    #38763943
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrособо страждующие тихой перезаписи могут открыть для себя режим no_record_versionIBaseрежим no record_version, вызывающий блокировки по чтению non-committed данныхБлагодарю :)
...
Рейтинг: 0 / 0
update conflicts with concurrent update
    #38763987
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Получается, что смысла убирать флаг nowait нет никакого? Он актуален только при Rollback?
грубо говоря, wait может иметь смысл при snapshot (concurrency) или table reserving (consistency). Для read committed wait только вреден. Вообще wait плох тем, что он приводит к повисанию приложения.
Потому и ввели в 2.0 параметр транзакции [LOCK TIMEOUT seconds].
...
Рейтинг: 0 / 0
update conflicts with concurrent update
    #38764154
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvгрубо говоря, wait может иметь смысл при snapshot (concurrency) или table reserving (consistency). Для read committed wait только вреденЯсно
kdvВообще wait плох тем, что он приводит к повисанию приложения.Мне это не критично. У меня многопоточный сервис. Поток может подождать, сколько нужно
kdvПотому и ввели в 2.0 параметр транзакции [LOCK TIMEOUT seconds].У меня IB. Но не суть.

В общем из того, что я тут наслушался и начитался на ibase, остановился на такой архитекутуре
1) Транзакции read_commited, rec_version
2) Если возникает ошибка isc_update_conflict запрос выполняется повторно.
3) Т.к. транзакция wait, то повторное выполнение происходит только после завершения конкурентной транзакции

И все таки смысла isc_update_conflict я не понял. "Чтобы не приходилось в саппорте отвечать на вопросы" - как-то неубедительно звучит
...
Рейтинг: 0 / 0
update conflicts with concurrent update
    #38764162
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_1) Транзакции read_commited, rec_version
ну слава богу!

_Vasilisk_И все таки смысла isc_update_conflict я не понял. "Чтобы не приходилось в саппорте отвечать на вопросы" - как-то неубедительно звучит
есть две модели обработки такого конфликта

Допустим, есть А, делает update, и есть Б, делает update в wait.

1. при commit транзакции А транзакция Б обломится, т.е. получит ошибку lock conflict ибо конкурирующая транзакция ИЗМЕНИЛА данные, а на какие, хрен его знает, поэтому транзации Б запрещается их перезаписывать. Так работает InterBase и Firebird

2. при commit транзакции А транзакция Б перепишет сделанные ею изменения, и не получит ошибки о конкурирующем update. Так, вроде бы, сделано в Оракле.

На клиентской стороне у ДатаСетов бывают аналогии этому поведению. Не в смысле конкурентного обновления, а в смысле убивания изменений, сделанных предыдущей транзакцией. То есть, перед входом в режим редактирования запоминаются столбцы строки, а при отправке update формируется запрос, который не проверяет ничего, проверяет изменения, или проверяет все.
upWhereKeyOnly - проверяется только ID записи, на остальное кладется болт
upWhereChanged - проверяются столбцы, которые менялись, плюс ID. Если старые значения уже не те, что были считаны перед переходом в режим редактирования, выдается ошибка.
upWhereAll - тут контролируются все столбцы, независимо, менялись они при редактировании, или нет. Главное, чтобы все столбцы имели те же значения при update, что и до "входа" в режим редактирования.

Если в отношении клиентской стороны (т.е. sql запросов) можно выбирать - класть болт на изменения или наоборот, их учитывать, то в отношении конкурирующих транзакций сервер поступает всегда единообразно, так, как в нем была реализована модель обработки таких конфликтов.

Также, не надо забывать, что транзакция snapshot при получении конфликта конкурентного update хоть в wait, хоть в nowait, не может "повторить update", т.к. в силу своего уровня изолированности она физически не может увидеть эти изменения, и соответственно, их переписать.

То есть, если для RC поведение Оракла еще бы имело смысл (например, типа, "давайте так же сделаем в ФБ"), то для snapshot - увы, никак и никогда. То есть, поведение обработки конфликта в ФБ в RC соответствует таковому в snapshot.
Однако, отлуп в ФБ в RC считается логичным, потому что если Б повисла на конфликте, то она до завершения А коммитом не в состоянии "увидеть" что изменила А. И это является индикацией, что до изменений Б кто-то уже успел запись изменить. Благо, как я уже сказал, RC по такой ошибке позволяет перечитать данные закоммиченные транзакцией А, и дальше решить, повторять update, или нет.
...
Рейтинг: 0 / 0
update conflicts with concurrent update
    #38764334
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv2. при commit транзакции А транзакция Б перепишет сделанные ею изменения, и не получит ошибки о конкурирующем update. Так, вроде бы, сделано в Оракле.ничего там такого нет, не надо придумывать.
...
Рейтинг: 0 / 0
update conflicts with concurrent update
    #38764537
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roadsterничего там такого нет
Есть.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
update conflicts with concurrent update
    #38764994
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovroadsterничего там такого нет
Есть.если очень хочется, то есть.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / update conflicts with concurrent update
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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