|
|
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
Перерыл все интернеты, но никак не могу понять в чем может быть причина deadlock. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2013, 12:48:47 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
Павел Ишенин, Надо срочно менять интернеты. На вот такие , например. Ну а если взять вот такие , то вообще красота. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2013, 12:51:42 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
Имею след. запрос: UPDATE OR INSERT INTO USERS_LOG (USER_ID, LAST_ACTIVE, IP_ADDRESS) VALUES ('6F175349428A6A4A93E8B1D65B9BEA78', CURRENT_TIMESTAMP, '127.0.0.1') Он выполняется каждым клиентом (web-броузер через Ajax) раз в минуту. Иногда этот запрос создает deadlock. Таблица не имеет никаких триггеров. Все транзацкии read write lock timeout 10 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2013, 12:55:42 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
miwaonlineНадо срочно менять интернеты. На вот такие , например. Ну а если взять вот такие , то вообще красота. Извините, я не успел дописать сообщение и случайно нажал комбинацией клавиш кнопку отправить. Эту статью я читал. Ситуация происходит следующая: 1. Транзакция 1 (set transaction read write wait timeout 10) стартует и начинает выполнять запрос на update конкретной записи в таблице. 2. Видимо в этот же самый момент стартует Транзакция 2 с теме же параметрами и выполняет тот же самый запрос. 3. Транзакция 1 успешно завершается. 4. Транзакция 2 ничего не ждя выдает: "General error: -913 deadlock update conflicts with concurrent update concurrent transaction number is ..." Но транзакции же wait, а значит, по моему мнению, транзакция 2 должна дождаться комита первой и выполнить запрос без ошибок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2013, 13:05:38 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
Павел Ишенинпо моему мнению, транзакция 2 должна дождаться комита первой и выполнить запрос без ошибок. Твоё мнение совпадает с мнением Ларри Эллисона, но отнюдь не Джима Старки. Поэтому иди-ка с ним на Оракул. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2013, 13:49:31 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
Почему у двух разных клиентов одинаковые ID (иначе не было бы concurrent update)? Если для каждого будет уникальный, то проблема исчезнет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2013, 14:04:17 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
Такой длинный идентификатор клиента и не уникальный... Галактика в опасности? или консерватория? Напомнил анекдот про ОченьДлинныйИдентификатор1,ОченьДлинныйИдентификатор2... Fr0sT-BrutalЕсли для каждого будет уникальный, то проблема исчезнет.А если еще и не адейтить, то ее не будет "бай дизайн". Даже Таблоиду не удалось нагнуть сервер на конкурентных инсертах. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2013, 14:29:53 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
Ivan_PisarevskyДаже Таблоиду не удалось нагнуть сервер на конкурентных инсертах. :) Николаю удалось. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2013, 14:34:10 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovНиколаю удалось.Павел Ишенинвыполняется каждым клиентом раз в минуту.Явно не с такой частотой шли инсерты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2013, 14:38:13 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
Fr0sT-BrutalПочему у двух разных клиентов одинаковые ID (иначе не было бы concurrent update)? Если для каждого будет уникальный, то проблема исчезнет. Так клиенты же одинаковые. Это web, и как следствие могут быть где-то задержки. Например, при коннекте из Норильска (чаще всего именно у них выскакивает этот deadlock) через их спутниковую связь. Таким образом, ajax запрос где-то задержался и нам на сервер вместо одного через минуту сразу прилетело 2. В принципе ничего ужасного в этих deadlock нет, но хотелось бы избавиться если это возможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2013, 14:38:46 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
Павел Ишенинхотелось бы избавиться если это возможно.инсерт "наше фсё". Опционально можно зачистить во время периодических регламентных работ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2013, 14:48:09 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovПавел Ишенинпо моему мнению, транзакция 2 должна дождаться комита первой и выполнить запрос без ошибок. Твоё мнение совпадает с мнением Ларри Эллисона, но отнюдь не Джима Старки. Поэтому иди-ка с ним на Оракул. Спасибо Дмитрий. Мы используем как Oracle, так и Firebird, но первый раз столкнулись с разработкой под web с Firebird. Хотели решить проблему средствами СУБД, но если таким образом победить deadlock не получится, то будем решать с других сторон. Возвращаясь к теме, мы проводили эксперименты блокируя запись из IBExpert, и в этом случае получали ожидаемый результат - firebird ждал положенные 10 (или около того) секунд и возвращал ошибку "lock timeout" (или что-то вроде), а не "deadlock". Отсюда и причина исходного вопроса о причине deadlock. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2013, 14:49:54 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
Ivan_PisarevskyПавел Ишенинхотелось бы избавиться если это возможно.инсерт "наше фсё". Опционально можно зачистить во время периодических регламентных работ. Записанная информация используется для отображения активности пользователя в web-приложении. Если использовать только insert, то усложнится запрос select, а как следствие и время извлечения информации из СУБД. А скорость времени выполнения запросов в web-приложениях критически важна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2013, 14:54:30 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
Павел ИшенинОтсюда и причина исходного вопроса о причине deadlock. Нет в исходном вопросе никакого "deadlock". Есть "update conflict", который возникает всегда , когда параллельные транзакции изменяют одну и ту же запись. Вне зависимости от параметра wait. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2013, 14:55:10 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
Павел ИшенинDimitry Sibiryakovпропущено... Твоё мнение совпадает с мнением Ларри Эллисона, но отнюдь не Джима Старки. Поэтому иди-ка с ним на Оракул. Спасибо Дмитрий. Мы используем как Oracle, так и Firebird, но первый раз столкнулись с разработкой под web с Firebird. Хотели решить проблему средствами СУБД, но если таким образом победить deadlock не получится, то будем решать с других сторон. Возвращаясь к теме, мы проводили эксперименты блокируя запись из IBExpert, и в этом случае получали ожидаемый результат - firebird ждал положенные 10 (или около того) секунд и возвращал ошибку "lock timeout" (или что-то вроде), а не "deadlock". Отсюда и причина исходного вопроса о причине deadlock. в примере, с которого все началось, запись НЕ БЛОКИРОВАНА ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2013, 14:56:23 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
Павел Ишенинто усложнится запрос select,Правда? ну если написание select first 1... order by last_active desc вместо select ... Павел Ишенина как следствие и время извлечения информации из СУБДровно одно индексное чтение в обоих случаях (если дизайн базы не с похмела делался). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2013, 14:57:57 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
Павел ИшенинЕсли использовать только insertто не будет версий->мусора, который гарантированно появится при апдейтах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2013, 15:00:08 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovПавел ИшенинОтсюда и причина исходного вопроса о причине deadlock. Нет в исходном вопросе никакого "deadlock". Есть "update conflict", который возникает всегда , когда параллельные транзакции изменяют одну и ту же запись. Вне зависимости от параметра wait. deadlock есть в сообщении об ошибке с сервера. В любом случае, спасибо. Из вашего сообщения я понял, что эту ошибку никак не исправить средствами СУБД, а следовательно нужно искать решения на стороне web-приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2013, 15:02:33 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
Павел Ишенинскорость времени выполнения запросов в web-приложениях критически важна. Нет, если не баловаться таймаутом выполнения скриптов или использовать вменяемые языки программирования вместо них. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2013, 15:04:14 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
Павел Ишенин Код: sql 1. а если обновлять, только если таймстемп уже малость протух (более одной минуты)? Если такого рода запросы сыпятся без остановки, то возможно проредить update не помешает, чем снизить конкурентность. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ну и заменить транзакцию на nowait ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2013, 15:05:07 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
Павел Ишенинdeadlock есть в сообщении об ошибке с сервера. Это старый известный недостаток данного сообщения: в "братскую могилу" со строкой "deadlock" собраны все конфликты. Именно поэтому читая сообщение об ошибке ни в коем случае нельзя останавливаться на его первой строке . По-настоящему полезная информация приводится в последних строках. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2013, 15:08:41 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
Ivan_PisarevskyПавел ИшенинЕсли использовать только insertто не будет версий->мусора, который гарантированно появится при апдейтах. Мусор в этом случае появится в самой таблице + дополнительный индекс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2013, 15:09:32 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
Павел ИшенинИногда этот запрос создает deadlock.А почему это проблема? Раз дэдлок, значит запись уже есть, сам же пользователь ее и апдейтит, чего ее апдейтить повторно? поймал, обработал, юзеру можно и не показывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2013, 15:19:26 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
Ivan_PisarevskyПавел ИшенинИногда этот запрос создает deadlock.А почему это проблема? Раз дэдлок, значит запись уже есть, сам же пользователь ее и апдейтит, чего ее апдейтить повторно? поймал, обработал, юзеру можно и не показывать. Юзеру эта ошибка не показывается. Ребята, большое спасибо за разъяснение причины ошибки. Теперь, когда я понимаю причину, я найду подходящее решение. Тему можно закрывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2013, 16:05:57 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
Ivan_PisarevskyДаже Таблоиду не удалось нагнуть сервер на конкурентных инсертах. :) чё-чё ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2013, 16:40:30 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
Таблоид чё-чё ? дык инсерты там вообще не причем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2013, 16:57:21 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
Самый безопасный метод - это одни инсерты без апдейтов, но он же наиболее неудобный. В текущей ситуации порекомендовал бы сделать транзакции no wait и ловить исключения concurrent update, в случае ошибки повторять запрос либо идти на выход. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2013, 17:04:29 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
dimitrдык инсерты там вообще не причемА, нашёл. Это в личку ты прислал, 12-ноя-2013 19:51 (тема письма: "Нагрузочный тест: lock conflict'ы в базе, в которую идут только COMMIT'ы "). Но из того объяснения я так и не понял, почему эта ошибку так трудно было воспроизвести. И почему вообще никто про неё ничего не говорил с 2000 %-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2013, 18:38:05 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
причем тут личка, в трекере есть описание ошибки, там есть хоть слово про инсерты? Или думаешь я там специально туман напускаю, чтобы никто не догадался? :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2013, 18:40:54 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
dimitrв трекере есть описание ошибки, там есть хоть слово про инсерты? http://tracker.firebirdsql.org/browse/CORE-4265 Under high concurrent load isc_attach_database() may return isc_lock_conflict error: Statement failed, SQLSTATE = 40001 lock conflict on no wait transaction without any obvious reasons . This happens only when a number of connections are being established at the same time .1) without any obvious reasons - они и сейчас, после фикса, не очевидные ? 2) are being established at the same time - я перевожу как: "устанавливаются в ОДНО И ТО ЖЕ время". Но в том тесте все новые коннекты шли с задержкой, там вызов паузы был между каждым N-м и (N+1)-м окном. И сообщение "lock conflict error" вылезало далеко не сразу после начала теста. И я в итоге так и не понимаю до сих пор: оно вообще с чем было связано-то ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2013, 18:59:54 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
Таблоидони и сейчас, после фикса, не очевидные ? это описание с т.з. наблюдателя. Причины есс-но стали понятны при исправлении. Таблоидя перевожу как: "устанавливаются в ОДНО И ТО ЖЕ время". Но в том тесте все новые коннекты шли с задержкой, там вызов паузы был между каждым N-м и (N+1)-м окном. И сообщение "lock conflict error" вылезало далеко не сразу после начала теста. это не означает, что через N минут работы два окна не могли пытаться приконнектиться в ОДНО И ТО ЖЕ время. Что и приводило к ошибке, если они выполняли один и тот же код (весьма короткий, а потому неуловимый) одновременно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2013, 19:36:07 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
dimitrЧто и приводило к ошибке, если они выполняли один и тот же код (весьма короткий, а потому неуловимый) одновременно.Теперь понятно. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2013, 19:40:56 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
PS. да, в той версии действительно были частые переконнекты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2013, 19:41:38 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, я так понимаю, Оракл при update conflict и wait, в отличие от IB/FB, тупо переписывает изменения, на которые он "натолкнулся"? И это радует Павла Ишенина? Я удивлен. Зачем тогда wait? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2013, 00:33:18 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
kdvя так понимаю, Оракл при update conflict и wait, в отличие от IB/FB, тупо переписывает изменения, на которые он "натолкнулся"? И это радует Павла Ишенина? Я удивлен. Зачем тогда wait? Это чуть-чуть иначе. Во-первых, у Оракула принципиально нет no wait. Во-вторых, он при конфликте не "переписывает изменения", а откатывает запрос и повторяет его целиком. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2013, 00:42:09 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, ну и нафиг нам такой Оракл тут нужен... Перезапись чужих изменений без понимания, что это за изменения - зло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2013, 03:04:29 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
kdvDimitry Sibiryakov, ну и нафиг нам такой Оракл тут нужен... Перезапись чужих изменений без понимания, что это за изменения - зло. А если с пониманием, что это повторный ajax request догнал первый и они оба прилетели на сервер одновременно? В текущей логике приложения других подобных ситуаций быть не может. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2013, 03:32:42 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
Павел Ишенин, если конфликты в принципе допустимы, но хочется уменьшить их число в таких ситуациях - рассмотри вариант с режимом изоляции read_committed no_record_version ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2013, 07:31:49 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
kdvDimitry Sibiryakov, я так понимаю, Оракл при update conflict и wait, в отличие от IB/FB, тупо переписывает изменения, на которые он "натолкнулся"? И это радует Павла Ишенина? Я удивлен. Зачем тогда wait? А если commit первой транзакции произошёл одну наносекунду назад, то уже всё ok? Мы (вторая транзакция) должны радоваться что не случилось конфликта? :) А если мы (вторая транзакция) наступаем на update conflict за одну наносекунду до коммита первой, то мы вполне можем подождать эту наносекунду (пока первая закоммитится), перепроверить условие в where, и совершить апдейт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2013, 09:28:49 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
NickDeeА если commit первой транзакции произошёл одну наносекунду назад, то уже всё ok? Мы (вторая транзакция) должны радоваться что не случилось конфликта? :) представь себе, да. Потому что наносекунда назад, или год назад, совершенно без разницы. NickDeeА если мы (вторая транзакция) наступаем на update conflict за одну наносекунду до коммита первой, то мы вполне можем подождать эту наносекунду (пока первая закоммитится), перепроверить условие в where, и совершить апдейт. в момент апдейта произошел конфликт. Если эта транзакция read_committed, то в ней программист может перечитать данные и повторить update. Но за него никто повторять апдейт не будет. Если сервер будет повторять выполняемые программой операции, то это будет не сервер, а прямо искуственный интеллект. А если это транзакция snapshot, то хоть обповторяйся, обновить запись будет невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2013, 10:07:32 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
Павел ИшенинА если с пониманием, что это повторный ajax request догнал первый и они оба прилетели на сервер одновременно? ну так программа должна это понимать, и обрабатывать. А не висеть на lock wait а потом в ужасе сообщать, что произошел конфликт. Я понимаю, что хотелось обойтись без написания кода, но увы, не получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2013, 10:09:15 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
dimitrПавел Ишенин, если конфликты в принципе допустимы, но хочется уменьшить их число в таких ситуациях - рассмотри вариант с режимом изоляции read_committed no_record_version Спасибо. Вкупе со следующим документом все стало понятнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2013, 10:59:40 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
Павел Ишенин, в той статье не совсем верно сделаны выводы, этот режим не гарантирует сериализацию при более чем двух конкурентах. Просто вероятность конфликта меньше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2013, 11:26:24 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
kdvну так программа должна это понимать, и обрабатывать. А не висеть на lock wait а потом в ужасе сообщать, что произошел конфликт. Дима, рекомендации по написанию приложения, это offtopic. Но раз уж хочется, то: 1. lock wait используется только для отдельных запросов, которые наперед известно что могут прийти одновременно и с точки зрения приложения это нормально. 2. повисеть 10 секунд это тоже нормально, так как запрос асинхронный и в интерфейсе пользователь этого вообще не заметит никак. 3. ошибки этого запроса не сказываются на работоспособности приложения и не выводятся в интерфейсе пользователя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2013, 11:26:34 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
Павел ИшенинДима, рекомендации по написанию приложения, это offtopic. Но раз уж хочется, то: Павел, при wait конфликта не будет только если конкурирующая транзакция завершилась по rollback. Об этом, если уж хочется, можно прочитать в документации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2013, 11:37:52 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
[quot kdv]Павел ИшенинПавел, при wait конфликта не будет только если конкурирующая транзакция завершилась по rollback. Об этом, если уж хочется, можно прочитать в документации. Тем не менее, вариант Дмитрия Еманова на тестах в isql практически исключил появление указанной ошибки. Вторая конкурирующая транзакция стала ждать и завершаться без ошибок. Я полагаю, что все равно возможны ситуации с ошибкой, но их вероятность стала значительно ниже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2013, 11:48:58 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
Павел ИшенинТем не менее, вариант Дмитрия Еманова на тестах в isql практически исключил появление указанной ошибки. лишь бы софт не переписывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2013, 12:06:35 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
kdvNickDeeА если мы (вторая транзакция) наступаем на update conflict за одну наносекунду до коммита первой, то мы вполне можем подождать эту наносекунду (пока первая закоммитится), перепроверить условие в where, и совершить апдейт. в момент апдейта произошел конфликт. Если эта транзакция read_committed, то в ней программист может перечитать данные и повторить update. Типа вот такого?: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Так работает. Только почему-то не получилось отловить по sqlcode -904 и по gdscode = 335544451, что соответствует ошибке показанной в IBExpert: "Update conflicts with concurrent update". Я тут с обработкой ошибок отметил несколько неудобств и рудиментов. Если бы я писал много кода на хранимках с обработкой ошибок, то очень быстро захотел бы обработки как в Delphi (для удобства и скорости). Работать с ошибками по номерам сильно удручает. И удручает что нет наследования. Наследования хотелось бы как для пользовательских эксепшэнов, так и для системных. Почему бы нам в sql не хотеть себе таки же удобно, как в Delphi? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2013, 12:23:15 |
|
||
|
deadlock при update записи
|
|||
|---|---|---|---|
|
#18+
NickDeeРаботать с ошибками по номерам сильно удручает. И не надо: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2013, 20:55:21 |
|
||
|
|

start [/forum/topic.php?all=1&fid=40&tid=1564104]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
67ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 215ms |
| total: | 392ms |

| 0 / 0 |
