|
|
|
update conflicts with concurrent update
|
|||
|---|---|---|---|
|
#18+
Объясните, пожалуйста фразу авторОдна транзакция стартует и модифицирует запись, и вторая пытается модифицировать ту же запись. Поскольку более одной не-committed версии для записи существовать не может, вторая транзакция получит сообщение: deadlock. update conflicts with concurrent update. У меня две транзакции модифицируют один и тот же набор данных. Обе транзакции read_commited, rec_version. В моем понимании, что если две транзакции будут модифицировать одну и ту же запись, то вторая, т.к. нет флага nowait, просто будет ожидать пока не завершится первая. В основном так и получается, но иногда получаю ошибкуавторdeadlock. update conflicts with concurrent updateЧего я не понимаю? С уважением, Vasilisk ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2014, 18:26 |
|
||
|
update conflicts with concurrent update
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_вторая, т.к. нет флага nowait, просто будет ожидать пока не завершится первая. И если ты завершилась коммитом - выкинет ошибку, которую ты и наблюдаешь. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2014, 18:28 |
|
||
|
update conflicts with concurrent update
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovИ если ты завершилась коммитом - выкинет ошибку, которую ты и наблюдаешь.Твою дивизию. Спасибо большое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2014, 18:30 |
|
||
|
update conflicts with concurrent update
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Твою дивизию. Тут тебе не оракул, автоматические мини-откаты отсутствуют. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2014, 18:50 |
|
||
|
update conflicts with concurrent update
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovТут тебе не оракул, автоматические мини-откаты отсутствуют.Все таки идея не совсем понятна. Ну полезли мы модифицировать запись, ну подождали. Но почему бы не отмодифицировать эту запись когда она разблокируется? Получается, что смысла убирать флаг nowait нет никакого? Он актуален только при Rollback? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2014, 19:03 |
|
||
|
update conflicts with concurrent update
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Но почему бы не отмодифицировать эту запись когда она разблокируется? Чтобы не приходилось в саппорте отвечать на вопросы криворуких разработчиков о lost update. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2014, 19:08 |
|
||
|
update conflicts with concurrent update
|
|||
|---|---|---|---|
|
#18+
особо страждующие тихой перезаписи могут открыть для себя режим no_record_version. А может и заодно откроют сопутствующие ему нюансы :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2014, 19:28 |
|
||
|
update conflicts with concurrent update
|
|||
|---|---|---|---|
|
#18+
dimitrособо страждующие тихой перезаписи могут открыть для себя режим no_record_versionIBaseрежим no record_version, вызывающий блокировки по чтению non-committed данныхБлагодарю :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2014, 20:14 |
|
||
|
update conflicts with concurrent update
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Получается, что смысла убирать флаг nowait нет никакого? Он актуален только при Rollback? грубо говоря, wait может иметь смысл при snapshot (concurrency) или table reserving (consistency). Для read committed wait только вреден. Вообще wait плох тем, что он приводит к повисанию приложения. Потому и ввели в 2.0 параметр транзакции [LOCK TIMEOUT seconds]. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2014, 20:58 |
|
||
|
update conflicts with concurrent update
|
|||
|---|---|---|---|
|
#18+
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 я не понял. "Чтобы не приходилось в саппорте отвечать на вопросы" - как-то неубедительно звучит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2014, 02:46 |
|
||
|
update conflicts with concurrent update
|
|||
|---|---|---|---|
|
#18+
_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, или нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2014, 03:26 |
|
||
|
update conflicts with concurrent update
|
|||
|---|---|---|---|
|
#18+
kdv2. при commit транзакции А транзакция Б перепишет сделанные ею изменения, и не получит ошибки о конкурирующем update. Так, вроде бы, сделано в Оракле.ничего там такого нет, не надо придумывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2014, 09:51 |
|
||
|
update conflicts with concurrent update
|
|||
|---|---|---|---|
|
#18+
roadsterничего там такого нет Есть. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2014, 11:51 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=38763898&tid=1563318]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
28ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 225ms |
| total: | 317ms |

| 0 / 0 |
