|
|
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
вот такой код: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. служит для того, чтобы исключить возможность одновременного выполнения определенной операции (с разных клиентов). Так вот. Всё работает отлично, но, к сожалению, не всегда. Иногда, после определенного (достаточно длительного) периода работы программы исключение deadlock начинает происходить всегда. Лечится обычно закрытием всех клиентов, и затем - открытием. Мне что-то подсказывает, что дело в многократном Rollback для одной и той же записи(остается много мусора, где-то у чего-то (временно) "башню сносит" и т.п.). Но на Commit переходить не совсем получается - при коммите эта запись будет отмечена триггером, как необходимая для репликации в центральную базу, а этого очень не хотелось бы - эти операции проходят часто, примерно раз в минуту, а запись на самом деле не меняется (SET TERMINAL_ID=TERMINAL_ID). Да и не факт, что переход на Commit поможет. Вопросы: как лучше всего попытаться решить данную проблему? В чём "на самом деле" проблема? Firebird 2.1.1.17910 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2014, 17:00:41 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
Да, хочу сразу добавить: программа зависнуть во время "Выполнения операции" не может - это выполняется в главном потоке, человеком. Если бы было зависание - зависла бы вся программа, а этого никогда не происходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2014, 17:03:29 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
Еще забыл добавить, извиняюсь. D6 + IBX ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2014, 17:17:25 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
YuRockВ чём "на самом деле" проблема? В нечтении http://ibase.ru/devinfo/pslock.htm и http://ibase.ru/devinfo/plocks.htm В версии 2.1 уже есть SELECT FOR UPDATE WITH LOCK, и тем более уровень изоляции транзакции consistency table preserve, которые позволяют заблокировать запись или таблицу без создания версий. PS: Репликация таблицы локов тоже выглядит довольно странно... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2014, 17:35:27 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Спасибо, буду читать. PS. Это не таблица локов, это таблица с полезными данными. Просто для этих целей (блокировок) там как раз есть необходимые записи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2014, 18:10:53 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
YuRock, возможно, я уже паскаль не помню, но разве Exit не выводит код ЗА пределы finally? Зачем вот это насилие с trLock.Free - разве нельзя один раз создать объект, а потом использовать его много раз? Ну и deadlock - это сообщение о том, что обновляемая запись заблокирована ДРУГОЙ транзакцией. Возможно, у вас теряется хэндл trLock из-за такого кода, и транзакция остается активной после успешного update. Короче, я бы посоветовал этот кусок проверить FBscanner-ом или через трейс/аудит, чтобы убедиться, что транзакция действительно завершается. Кроме того, по коду совершенно неясно, накой черт делать update, потом какие-то действия, а потом безусловный rollback в секции finally В ОДНОЙ короткой транзакции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2014, 20:02:41 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
kdvразве Exit не выводит код ЗА пределы finally? Нет. finally выполняет всегда, это его самое ценное качество. Но вот код, который аффтар в него запихнул - полное УГ. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2014, 20:05:38 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, 1. Огромное спасибо! С SELECT FOR UPDATE WITH LOCK всё получилось. Не знаю, поможет ли это для решения проблемы (надеюсь), но по крайней мере ушли от вызова триггеров, и, соответственно, rollback - уже хорошо. 2. По воводу consistency table preserve. Если не сложно. Можно меня мордой тыкнуть, чтобы я не мучился? Какие это константы транзакции? Те же, что у меня, только no_rec_version? Я проверил - так вроде работает. Я прав? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2014, 20:05:44 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
kdvКроме того, по коду совершенно неясно, накой черт делать update, потом какие-то действия, а потом безусловный rollback в секции finally В ОДНОЙ короткой транзакции. UPDATE - просто для проверки, не "заблокирована" ли запись другой транзакцией. Чтобы если "заблокирована" - получить исключение и не выполнять никаких действий. Теперь переделал на SELECT FOR UPDATE WITH LOCK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2014, 20:10:11 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovНо вот код, который аффтар в него запихнул - полное УГ. Запихнул туда то, что понятно и наглядно (для меня). Теперь там вместо rollback будет commit ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2014, 20:11:31 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
kdvВозможно, у вас теряется хэндл trLock из-за такого кода, и транзакция остается активной после успешного update. Да нет, этот алгоритм работает. Только до поры - до времени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2014, 20:12:53 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
YuRockДа нет, этот алгоритм работает. Только до поры - до времени. еще раз, чревовещаю: deadlock возникает как правило при обновлении записи, которая уже обновлена в другой, незавершенной, транзакции. То есть, буквально, у вас Rollback/Commit не срабатывает, и где-то теряется в коде. Я таких случаев уже насмотрелся, именно вот с этими динамическими созданиями-освобождениями транзакций. Всего одной кривой строчки в коде достаточно, чтобы получилась такая хреновня. Не хотите мониторить FBScanner/trace-audit, смотрите в mon$transactions. Не надо заниматься фигней, надо искать открытые транзакции, которые не должны быть таковыми. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2014, 21:24:56 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
YuRockDimitry SibiryakovНо вот код, который аффтар в него запихнул - полное УГ. Запихнул туда то, что понятно и наглядно (для меня). Теперь там вместо rollback будет commit Меня лично поразил вот этот момент: "Но на Commit переходить не совсем получается - при коммите эта запись будет отмечена триггером , как необходимая для репликации в центральную базу, а этого очень не хотелось бы - эти операции проходят часто, примерно раз в минуту, а запись на самом деле не меняется (SET TERMINAL_ID=TERMINAL_ID)." SET TERMINAL_ID=TERMINAL_ID раз в минуту с rollback.... да пусть даже и commit. Охренеть, извините. Зачем?! В чем смысл?! Реально в триггере можно путем сравнения if (old.value<>new.value) then установить флаг репликации без особых проблем. Создание "фантомных" TIBTransaction - это признак недопонимания транзакций вообще - и мне кажется, что для начала стоит почитать на ibase.ru статьи по теме длинных читающих и коротких пишущих транзакций - это снимает кучу проблем при разработке и доводке. . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 06:16:03 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
kdvеще раз, чревовещаю: deadlock возникает как правило при обновлении записи, которая уже обновлена в другой, незавершенной, транзакции. То есть, буквально, у вас Rollback/Commit не срабатывает, и где-то теряется в коде. Я специально обновляю запись, чтобы получить deadlock в случае, если эта запись обновлена в другой транзакции. Неужели непонятно до сих пор? Rollback/Commit срабатывает в любом случае - и при исключении, и при Exit, и если всё нормально. Транзакция (эта) завершается. И тем не менее проблема появляется через несколько дней работы этого алгоритма. Потому я и обратился на этот форум. Естественно, я не могу посмотреть, что там было у заказчика в mon$transactions в этот момент. А Даже если б и смог (чисто теоретически) - это не помогло бы, ибо куча клиентов работает с базой в этот момент. Соединений 10 - минимум. А сам я такоую ситуацию поймать, конечно же, не могу - у меня всё работает. Но случаи такие периодически происходят. Пару раз в месяц - точно. А программа работает на ~70 точках круглосуточно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 14:39:47 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
ooo_kontaktпочитать на ibase.ru статьи по теме длинных читающих и коротких пишущих транзакций - это снимает кучу проблем при разработке и доводке ooo, а видеокарту мне поменять не недо? Извините, не сдержался, но может поможет при разработке и доводке, а то я с 2002 читаю эти статьи и не только, с тех пор как эту программу сделал запустил еще на ФБ 1.0, вернее, с 2003, как с BDE перевел на IBX, а никак не помогает - не могу всё запомнить. Особенно, учитывая, что многое только на опыте приходит, методом проб. ooo_kontaktРеально в триггере можно путем сравнения if (old.value<>new.value) then установить флаг репликации без особых проблем Я деньги платить не буду. Даже за дельные советы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 14:46:52 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
kdv, Dimitry Sibiryakov, пожалуйста, ответьте для успокоения. Если я в своём алгоритме UPDATE заменю на Код: sql 1. - одна запись, транзакцию сделаю read_committed no_rec_version nowait, и RollBack заменю на Commit, то мусор в базе будет накапливаться? И чем это может быть чревато? (если может) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 14:53:26 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
YuRockЕстественно, я не могу посмотреть, что там было у заказчика в mon$transactions в этот момент. В чём проблема-то? Заказчик не даёт тебе доступа к своему серверу и при этом так туп, что неспособен выполнить скрипт в isql и прислать тебе результаты?.. YuRockА Даже если б и смог (чисто теоретически) - это не помогло бы, ибо куча клиентов работает с базой в этот момент. Соединений 10 - минимум. И чо? Застрявшая транзакция принадлежит только одному из них. Название приложения, создавшего этот коннект, видно в mon$attachments. Время её старта - тоже. Ты в своём приложении неспособен вести лог действий, включая старты и финиши транзакций?.. YuRockответьте для успокоения. Отвечаю: вопрос бредовый, локи и мусор никак не связаны с уровнем изоляции транзакций. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 15:15:24 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovВ чём проблема-то? Заказчик не даёт тебе доступа к своему серверу и при этом так туп, что неспособен выполнить скрипт в isql и прислать тебе результаты?.. И то, и другое, и третье. 1. Я узнаю о тм, что проблема происходила, в лучшем случае на следующий день. 2. Заказчик - продавец в магазине (грубо говоря). Он вообще мало на что способен. Максимум, что он может сделать под чутким руководством службы поддержки по телефону- это перезапустить программу (компьютер), что помогает. Dimitry SibiryakovИ чо? Застрявшая транзакция принадлежит только одному из них. Название приложения, создавшего этот коннект, видно в mon$attachments. Время её старта - тоже. Ты в своём приложении неспособен вести лог действий, включая старты и финиши транзакций?.. Название приложения будет почти всегда одинаковое. В самом приложении - минимум два подключения, в одном из которых всегда висит readonly транзакция, + к нему подключены куча плагинов, каждый из которых открывает как минимум одно подключение. Нет, увы, не способен :(. Если бы изначально пришла идея в функцию старта транзакции вставить лог (ну и завершать тоже с логом) - тогда другое дело. Но эта идея тогда не пришла, а теперь, когда уже 60 мегабайт только файлов *.pas и *.dfm - это сделать вообще проблематично :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 15:29:17 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovвопрос бредовый, локи и мусор никак не связаны с уровнем изоляции транзакций. Не отрицаю, но мой изначальный вопрос (в топике) был таков: "В чём "на самом деле" проблема?". Так как прямого ответа на него я так и не получил (ибо алгоритм, который я привёл - по логике правильный, и по идее должен работать без проблем вечно), то я продолжаю подозревать, что "на самом деле" проблема была в том, что после каждого RollBack в базе оставались и накапливались версии записи с соответствующим идентификатором транзакции, которая rolled back, и со временем весь этот механизм мог начать тормозить или ещё как-то глючить. Потому я Вас и прошу ответить - подобного мусора снанет меньше при SELECT FOR UPDATE WITH LOCK? А как уровень изоляции мне может помочь в этом случае, я честно говоря, пока вообще не особо понял, т.к. меня интересует в логике просто блокировка записи. Т.е. я не понимаю, чем rec_version хуже no_ rec_version для данной задачи (т.е. получить исключение deadlock). Потому и прошу объяснить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 15:51:35 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
YuRockтеперь, когда уже 60 мегабайт только файлов *.pas и *.dfm - это сделать вообще проблематично :( Да ну? Кинуть всего на одну форму всего один TIBMonitor для тебя проблематично?.. Ню-ню... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 15:52:57 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovДа ну? Кинуть всего на одну форму всего один TIBMonitor для тебя проблематично?.. Ню-ню... Да, если переделать все во всех коннекшены - установить traceflags. Затем разбирать текст в сообщении. Но что я получу? Количество открытых транзакций? Их может быть несколько, и это нормальная ситуация. Т.е. как это может помочь, непонятно. Более того, я получу эту инфу после того, как везде обновится версия, а затем проявится проблема (проявится и засветится, что не одно и тоже - чаще всего молчат). Поэтому я всё же прошу Вас ответить на вопросы в моём предыдущем посте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 16:06:08 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
YuRock как с BDE перевел на IBX, а никак не помогает - не могу всё запомнить. да что там запоминать-то... YuRockЯ деньги платить не буду. Даже за дельные советы. ну и нафиг. сам учиться не хочу, деньги платить не хочу, значит в сад. Я уже предложения по мониторингу изложил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 16:46:51 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
YuRockмой изначальный вопрос (в топике) был таков: "В чём "на самом деле" проблема?". Так как прямого ответа на него я так и не получил А ты всерьёз на него рассчитывал?.. Что, прямо так: без анализа логов, без знания твоего кода, последовательности работы и т.п. ткнуть пальцем и сказать "здесь проблема"?.. Так не бывает. (Не, один раз в жизни мне это удалось, но там случай был особый.) YuRockподобного мусора снанет меньше при SELECT FOR UPDATE WITH LOCK? Нет. YuRockчем rec_version хуже no_rec_version для данной задачи (т.е. получить исключение deadlock). Тем, что вызывает меньше deadlock, которые ты так жаждешь получать. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 17:13:37 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
kdvда что там запоминать-то... Говорит человек, написавший все эти статьи :) kdvYuRockЯ деньги платить не буду. Даже за дельные советы. ну и нафиг. сам учиться не хочу, деньги платить не хочу, значит в сад. Я уже предложения по мониторингу изложил. [/quote] kdv, ну не сдержался я. Человек мне начал довать советы (при чем абсолютно бессмысленные) по оптимизации репликациции базы. При чём это к топику? Я извиняюсь еще раз. В сад так в сад. Советы - советами, одним я воспользовался (о SELECT FOR UPDATE WITH LOCK) - большое спасибо. Жаль, что потом не получил ответов ни на один из своих вопросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 17:23:05 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
уже частично получил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 17:24:41 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovТем, что вызывает меньше deadlock, которые ты так жаждешь получать. В смысле - меньше? Как deadlock может быть больше или меньше? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 17:25:42 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
А, я понял. Имеется в виду - реже :), т.к. при чтении (без FOR UPDATE WITH LOCK) не бывает deadlock-ов при rec_version. Но у меня-то чтений и нет. Так чем же в моём случае rec_version хуже no_rec_version? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 17:38:02 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
YuRockВ смысле - меньше? Как deadlock может быть больше или меньше? no_rec_version порождает deadlock и в ситуациях, где rec_version этого не делает. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 17:38:42 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
YuRockНо у меня-то чтений и нет это ты так думаешь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 17:41:39 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
dimitrэто ты так думаешь Спасибо, что уделили внимание моей теме. Я так понял, это намёк на то, что перед update выполняется много чтений в любом случае, используя текущую транзакцию. В любом случае, всем спасибо. Переделал на SELECT FOR UPDATE WITH LOCK, + изменил rec_version на no_rec_version. Отдал на тестирование/обновление. Если в ближайшие несколько месяцев проблема не повторится, значит - помогло. Если повторится - приду сюда снова и доказательства принесу - полные логи с TIBSQLMonitor :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 17:52:00 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
YuRock, это намек на то, что update сначала читает, а потом уже пишет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 18:48:05 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
YuRockПеределал на SELECT FOR UPDATE WITH LOCK, + изменил rec_version на no_rec_version. Стекло протереть забыл, шаман хренов. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 19:01:18 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
dimitrэто намек на то, что update сначала читает, а потом уже пишет Да, я приблизительно это и имел ввиду под "перед update выполняется много чтений в любом случае". Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 20:05:31 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovСтекло протереть забыл, шаман хренов. Не забыл - еще rollback на commit поменял. Давайте не переходить на личности - я не любитель. Если я раздражаю вопросами, ответы на которые можно получить перечитав статьи kdv - извините, такой я человек, я не могу осмыслить и запомнить сразу много информации, не попробовав всё сам на примерах и не прочувствовав, как это работает. И не понаступав на грабли, на что времени нет. Остаётся в памяти только то, с чем сталкивался и чем пользуюсь. Что касается логирования транзакций - та же проблем со временем. И отсутствие целесообразности применительно к данному примеру (транзакция может не откатиться только в случае, если программа зависла, чего не бывает никогда). Но на будущее, конечно, сделаю. Хотя TIBSQLMonitor и не даёт параметров транзакции, всё равно будет полезно. Так что меня тоже можно понять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 20:24:32 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
YuRockЕсли я раздражаю вопросами, ответы на которые можно получить перечитав статьи kdv - извините Ты раздражаешь изменением случайных кусков кода в случайном направлении без анализа причин проблемы. Это не поддаётся извинению. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 20:31:36 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovбез анализа причин проблемы Как без анализа? Я в самом начале написал, что причина может быть только в некорректной (не совсем корректной) работе с базой. Т.к. причины в логике программы быть не может, т.к. тогда зависала бы программа, чего не бывает. Вот поэтому я и изменил работу с базой. Что я сделал нелогично? Я не вижу других причин, кроме двух - в логике и в базе. Надо что-то делать. Выхода из ситуации вижу три: 1. Если причина в логике - изменить логике (что я не сделал, т.к. тут ошибок нет); 2. Если причина в базе - изменить работу с базой; 3. Сменить профессию - с одной стороны - уже поздно, с другой - пока рано. Вот такой анализ. Бред? Если по Вашему - да - прошу не отвечать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 19:38:57 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
YuRockТ.к. причины в логике программы быть не может, т.к. тогда зависала бы программа сильная гипотеза... а у неё доказательства есть ? Код: sql 1. 2. Вот тебе программа, складывающая два числа. Она не зависает. А проблeма в логике есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 19:43:05 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
YuRockЧто я сделал нелогично? Ты не стал копать вглубь и выяснять какая последовательность действий приводит к проблеме. Или хотя бы выяснить где именно возникает проблема. Ты просто увидел сообщение об ошибке deadlock и решил, что оно возникает там, где ты ожидаешь получение deadlock. Извини, не все баги настолько глупы, чтобы сидеть там, где ты их ожидаешь. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 19:49:13 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
YuRockДа нет, этот алгоритм работает. Только до поры - до времени. Т.е. твоя логика программирования - всё везде работает, пока не доказана ошибка. Это испорченная логика, она привела к тебя к проблеме, а ты даже примерно не можешь угадать где она кроется. Нормальная логика "не работает ничего и нигде, пока недоказано что ошибок нет" То что ты написал - это примерно как "Я перехожу дорогу не глядя по сторонам. Были статьи, где писали всякую чушь, что надо искать специальной место, какие-то специальные лампочки - но там слишком много написано, это мне не помогает, не могу запомнить. Ну и не надо, я просто подхожу к дороге и сразу её перехожу. Все работает, алгоритм правильный. Только до поры - до времени." Вот у тебя "до поры до времени" и случилось. И по большому счёту у тебя теперь два пути. Один подход паскалевский: "сомневайся во всем." От самых корней и выше доказывай, что твоя программа правильная. Где не сможешь доказать - там и ошибка, или одна из. Откуда начинать теюе уже сказали - найди транзакцию, которая запись держит. Возникает дедлок - прочитай ВСЕ транзакции и сохрани их в файл и чтобы тебе этот файл присылали после таких проблем. Это ещё противнее, чем читать статьи, но в среднем это быстрее. Другой подход: "Часы я потерял в деревне, но искать буду в городе, тут светлее". Если повезет - найдешь что-чьи-нибудь часы быстро и не напрягая мозги. И на неделю проблема спрячется. А потом вылезет в другом месте. А потом в третьем. И т.д. Но ты можешь оказаться везунчиком и решить проблему с первой попытки. В первом случае тебе могут помочь хотя бы советами. Во втором - только пожелать удачи. Выбирать тебе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 20:00:34 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovувидел сообщение об ошибке deadlock и решил, что оно возникает там, где ты ожидаешь получение deadlock ну естественно, т.к. больше нигде нет обращений к этой записи. Только при запуске чтение кое-каких данных из неё (та транзакция тоже закрывается, естественно), а потом был только этот update. Итак, где именно я выяснил (не придумал, правда). Последовательность действий - пользователь пытается сделать некую операцию, чем запускает код, написанный в первом посте. Т.к. для этого ничего другого нельзя сделать. Естественно, я это всё знал перед тем, как зайти на этот форум. К чему эти выражения - "копать вглубь" и т.д.? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 20:09:18 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
YuRockт.к. больше нигде нет обращений к этой записи т.е. по вашему запускается только один единственный экземпляр программы на одном единственном компьютере, а счама эта функция не может быть вызвана дважды ни через рекурсию (TDataSet.Onxxx, Application.ProcessMessages и прочие фишки) ни через многопоточность ? YuRockта транзакция тоже закрывается, естественно И в этом вы тоже уверены. И еще уверены, что закрывается сразу, а не через час. Если вы действительно это все доказали, то случилось, что-то удивительно и редкое. Так бывает. Но чаще бывает, что уверенность программиста, все эти "естественно" - оказалось ошибочной. YuRockЕстественно, я это всё знал В таком случае вы можете это доказать и другим и себе, например просмотрев список транзакций во время ошибки. И дальше шаг ща шагом искать место, где "естественно" не сыграло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 20:16:24 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
Ariochнайди транзакцию, которая запись держит... В первом случае тебе могут помочь хотя бы советами. Во втором - только пожелать удачи. Выбирать тебе. Эта транзакция может быть только одна - больше в проекте нет обращений к этой записи. И эта транзакция может не завершиться только в случае, если действие, выполняемое между update и rollback зависнет, но тогда и программа зависнет (т.к. это основной поток), чего не бывает. Впрочем, я всё это уже не раз писАл, но ты, я так понял, мало читаешь - больше пишешь. Тебе наверно можно посоветовать больше читать, меньше писать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 20:23:45 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
Ariochт.е. по вашему запускается только один единственный экземпляр программы на одном единственном компьютере, а счама эта функция не может быть вызвана дважды ни через рекурсию (TDataSet.Onxxx, Application.ProcessMessages и прочие фишки) ни через многопоточность ? нет, это всё не по-моему. Дальше, я так понял, всё отчасти строится на этом утверждении (неверном), т.ч. на остальное отвечать уже не буду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 20:28:45 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
YuRock, Если ты из того же Донецка, что и я - можешь подойти, я на пальцах/примерах покажу ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 20:31:37 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
YuRockЭта транзакция может быть только одна YuRockнет, это всё не по-моему. Ты сам себе противоречишь. Впрочем, удачи тебе в попытках наугад припрятать ошибку ещё сильнее. Раньше или позже это получится и случаться она будет, например, раз в месяц. И всем будет хорошо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 20:33:23 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
DarkMaster, Спасибо, но боюсь меня в твой офис не пустят ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 20:35:00 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
Arioch, Когда я говорил, что она может быть одна, конечно, имел ввиду, что она может быть только "эта" - с именем объекта trLock. Если и это непонятно - действительно, о чем дальше говорить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 20:39:22 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
YuRockЭта транзакция может быть только одна - больше в проекте нет обращений к этой записи. В сообщении об ошибке не указывается на какой записи она возникла. Почему ты уверен, что она возникает именно при обращении к этой записи? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 20:43:45 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
YuRockс именем объекта trLock. Это выражение не имеет смысла. Но поскольку ты тут самый умный, то едва ли мы можем тебя чему-то учить. Возможно, тебе действителньо стоит побиться лбом об стену пару недель, прежде чем ты признаешь, что программа работает не так, как ты себе придумал. А может быть тебе повезёт случайно спрятать ошибку и не менять своей самоувренности. Я тебе написал несколько причин, почему может быть несколько транзакций, дёргающих эту запись, и это еще не все причины, а только самые очевидные. Тебе ещё раньше написали, как это проверить. Но проверять ты не хочешь, тебе кажется, что твоё воображение, как работает программа, полностью соответствует реальности. Не вопрос, имееш ьправо искать ошибку так, как проще, а не так, как эффективнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 20:51:47 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovВ сообщении об ошибке не указывается на какой записи она возникла. Почему ты уверен, что она возникает именно при обращении к этой записи? Блин, ну потому, что она возникает, только когда пользователь, грубо говоря, нажимает на кнопку, по которой выполняется код, который я привёл в 1-м посте! Иначе зачем бы я его приводил - просто пофилософствовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 21:38:48 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
AriochЭто выражение не имеет смысла. Ну ясно. Понять предложение "транзакция с именем объекта trLock" как "транзакция, созданная объектом с именем trLock" нереально никак. Главное придраться. В твоём сообщении вообще нет смысла - ты в который раз повторяешь бессмысленные утверждения, которые ты уже писал ранее. И разбавляешь их заумными философскими советами. AriochНо поскольку ты тут самый умный Я? Я вообще ничего не понимаю. Ни в футболе, ни в программировании, ни в математике... И бумажки даже соответствующие есть. Потому и на форум пришел вопросы задавать, а не людей учить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 21:52:19 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
YuRockDimitry SibiryakovВ сообщении об ошибке не указывается на какой записи она возникла. Почему ты уверен, что она возникает именно при обращении к этой записи? Блин, ну потому, что она возникает, только когда пользователь, грубо говоря, нажимает на кнопку, по которой выполняется код, который я привёл в 1-м посте! Иначе зачем бы я его приводил - просто пофилософствовать? Да, и еще. Запись эта получается фильтром по идентификатору поля первичного ключа, т.ч. update идет по-любому по одной записи. Если Вы это имели ввиду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 21:54:02 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
YuRockсозданная объектом с именем trLock Эта фраза тоже не имеет смысла. И да, это не просто придирка на пустом месте, это тебя ещё и ещё раз подвожу к тому, что 1. программ много 2. бывает рекрсия. 3. бывают утечки памяти - в виде потерянных живых объектов YuRockПотому и на форум пришел вопросы задавать, а не людей учить. Тебе уже несколько человек сказали, что проверять. И все они более-менее согласны и говорят об одном. Ты им всем сказал "я не буду это проверять. Я лучше вас знаю, что может и что не может случиться в моей программе". Так каких же советов ты якобы просишь, если ты их все отвергаешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 22:15:37 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
YuRockИначе зачем бы я его приводил И кстати, ты его не привёл. Ты привёл какие-то обрезки без описания какими объектами это всё пользуется, какие у них взаимосвязи и настройки, какие events они могут дёрнуть (а те дёрнут другие events и понеслось...) и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 22:18:37 |
|
||
|
Проблема с dead/lock после Rollback
|
|||
|---|---|---|---|
|
#18+
Arioch, Слушай, извини конечно, но хватит уже на меня бросаться. Кто знает, здесь есть black-list? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 22:22:19 |
|
||
|
|

start [/forum/topic.php?all=1&fid=40&tid=1563887]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
151ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
88ms |
get tp. blocked users: |
2ms |
| others: | 215ms |
| total: | 497ms |

| 0 / 0 |
