powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Проблема с dead/lock после Rollback
56 сообщений из 56, показаны все 3 страниц
Проблема с dead/lock после Rollback
    #38558804
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот такой код:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
  // создание объекта trLock: TIBTransaction с константами read_committed rec_version nowait
  try
    try
      // UPDATE одной всегда существующей записи
    except
      on E: Exception do begin
        ShowMessage( E.Message );
        Exit;
      end;
    end;

    // Выполнение операции (максимум несколько секунд)
  finally
    if trLock.InTransaction then trLock.Rollback;
    trLock.Free;
  end;



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

Так вот. Всё работает отлично, но, к сожалению, не всегда. Иногда, после определенного (достаточно длительного) периода работы программы исключение deadlock начинает происходить всегда. Лечится обычно закрытием всех клиентов, и затем - открытием.

Мне что-то подсказывает, что дело в многократном Rollback для одной и той же записи(остается много мусора, где-то у чего-то (временно) "башню сносит" и т.п.). Но на Commit переходить не совсем получается - при коммите эта запись будет отмечена триггером, как необходимая для репликации в центральную базу, а этого очень не хотелось бы - эти операции проходят часто, примерно раз в минуту, а запись на самом деле не меняется (SET TERMINAL_ID=TERMINAL_ID).
Да и не факт, что переход на Commit поможет.

Вопросы: как лучше всего попытаться решить данную проблему? В чём "на самом деле" проблема?

Firebird 2.1.1.17910
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38558806
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, хочу сразу добавить: программа зависнуть во время "Выполнения операции" не может - это выполняется в главном потоке, человеком. Если бы было зависание - зависла бы вся программа, а этого никогда не происходит.
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38558832
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще забыл добавить, извиняюсь. D6 + IBX
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38558856
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38558898
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Спасибо, буду читать.

PS. Это не таблица локов, это таблица с полезными данными. Просто для этих целей (блокировок) там как раз есть необходимые записи.
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38559002
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock,

возможно, я уже паскаль не помню, но разве Exit не выводит код ЗА пределы finally? Зачем вот это насилие с trLock.Free - разве нельзя один раз создать объект, а потом использовать его много раз?
Ну и deadlock - это сообщение о том, что обновляемая запись заблокирована ДРУГОЙ транзакцией. Возможно, у вас теряется хэндл trLock из-за такого кода, и транзакция остается активной после успешного update.
Короче, я бы посоветовал этот кусок проверить FBscanner-ом или через трейс/аудит, чтобы убедиться, что транзакция действительно завершается.

Кроме того, по коду совершенно неясно, накой черт делать update, потом какие-то действия, а потом безусловный rollback в секции finally В ОДНОЙ короткой транзакции.
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38559006
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvразве Exit не выводит код ЗА пределы finally?
Нет. finally выполняет всегда, это его самое ценное качество. Но вот код, который аффтар в
него запихнул - полное УГ.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38559008
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

1. Огромное спасибо! С SELECT FOR UPDATE WITH LOCK всё получилось. Не знаю, поможет ли это для решения проблемы (надеюсь), но по крайней мере ушли от вызова триггеров, и, соответственно, rollback - уже хорошо.

2. По воводу consistency table preserve. Если не сложно. Можно меня мордой тыкнуть, чтобы я не мучился? Какие это константы транзакции? Те же, что у меня, только no_rec_version? Я проверил - так вроде работает. Я прав?
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38559010
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvКроме того, по коду совершенно неясно, накой черт делать update, потом какие-то действия, а потом безусловный rollback в секции finally В ОДНОЙ короткой транзакции.

UPDATE - просто для проверки, не "заблокирована" ли запись другой транзакцией. Чтобы если "заблокирована" - получить исключение и не выполнять никаких действий.
Теперь переделал на SELECT FOR UPDATE WITH LOCK
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38559012
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovНо вот код, который аффтар в
него запихнул - полное УГ.
Запихнул туда то, что понятно и наглядно (для меня). Теперь там вместо rollback будет commit
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38559014
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvВозможно, у вас теряется хэндл trLock из-за такого кода, и транзакция остается активной после успешного update.
Да нет, этот алгоритм работает. Только до поры - до времени.
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38559071
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockДа нет, этот алгоритм работает. Только до поры - до времени.
еще раз, чревовещаю:
deadlock возникает как правило при обновлении записи, которая уже обновлена в другой, незавершенной, транзакции.
То есть, буквально, у вас Rollback/Commit не срабатывает, и где-то теряется в коде. Я таких случаев уже насмотрелся, именно вот с этими динамическими созданиями-освобождениями транзакций. Всего одной кривой строчки в коде достаточно, чтобы получилась такая хреновня. Не хотите мониторить FBScanner/trace-audit, смотрите в mon$transactions. Не надо заниматься фигней, надо искать открытые транзакции, которые не должны быть таковыми.
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38559272
ooo_kontakt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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 статьи по теме длинных читающих и коротких пишущих транзакций - это снимает кучу проблем при разработке и доводке. .
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38559883
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvеще раз, чревовещаю:
deadlock возникает как правило при обновлении записи, которая уже обновлена в другой, незавершенной, транзакции.
То есть, буквально, у вас Rollback/Commit не срабатывает, и где-то теряется в коде.

Я специально обновляю запись, чтобы получить deadlock в случае, если эта запись обновлена в другой транзакции. Неужели непонятно до сих пор?

Rollback/Commit срабатывает в любом случае - и при исключении, и при Exit, и если всё нормально. Транзакция (эта) завершается. И тем не менее проблема появляется через несколько дней работы этого алгоритма. Потому я и обратился на этот форум.

Естественно, я не могу посмотреть, что там было у заказчика в mon$transactions в этот момент. А Даже если б и смог (чисто теоретически) - это не помогло бы, ибо куча клиентов работает с базой в этот момент. Соединений 10 - минимум.

А сам я такоую ситуацию поймать, конечно же, не могу - у меня всё работает. Но случаи такие периодически происходят. Пару раз в месяц - точно. А программа работает на ~70 точках круглосуточно.
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38559892
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ooo_kontaktпочитать на ibase.ru статьи по теме длинных читающих и коротких пишущих транзакций - это снимает кучу проблем при разработке и доводке
ooo, а видеокарту мне поменять не недо? Извините, не сдержался, но может поможет при разработке и доводке, а то я с 2002 читаю эти статьи и не только, с тех пор как эту программу сделал запустил еще на ФБ 1.0, вернее, с 2003, как с BDE перевел на IBX, а никак не помогает - не могу всё запомнить. Особенно, учитывая, что многое только на опыте приходит, методом проб.

ooo_kontaktРеально в триггере можно путем сравнения if (old.value<>new.value) then установить флаг репликации без особых проблем
Я деньги платить не буду. Даже за дельные советы.
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38559902
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv, Dimitry Sibiryakov,

пожалуйста, ответьте для успокоения. Если я в своём алгоритме UPDATE заменю на

Код: sql
1.
SELECT FIRST 1 1 FROM ... WHERE ... FOR UPDATE WITH LOCK

- одна запись,
транзакцию сделаю read_committed no_rec_version nowait,
и RollBack заменю на Commit,

то мусор в базе будет накапливаться? И чем это может быть чревато? (если может)
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38559936
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockЕстественно, я не могу посмотреть, что там было у заказчика в
mon$transactions в этот момент.
В чём проблема-то? Заказчик не даёт тебе доступа к своему серверу и при этом так туп, что
неспособен выполнить скрипт в isql и прислать тебе результаты?..

YuRockА Даже если б и смог (чисто теоретически) - это не помогло бы, ибо куча
клиентов работает с базой в этот момент. Соединений 10 - минимум.
И чо? Застрявшая транзакция принадлежит только одному из них. Название приложения,
создавшего этот коннект, видно в mon$attachments. Время её старта - тоже. Ты в своём
приложении неспособен вести лог действий, включая старты и финиши транзакций?..

YuRockответьте для успокоения.
Отвечаю: вопрос бредовый, локи и мусор никак не связаны с уровнем изоляции транзакций.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38559951
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovВ чём проблема-то? Заказчик не даёт тебе доступа к своему серверу и при этом так туп, что
неспособен выполнить скрипт в isql и прислать тебе результаты?..
И то, и другое, и третье.
1. Я узнаю о тм, что проблема происходила, в лучшем случае на следующий день.
2. Заказчик - продавец в магазине (грубо говоря). Он вообще мало на что способен. Максимум, что он может сделать под чутким руководством службы поддержки по телефону- это перезапустить программу (компьютер), что помогает.

Dimitry SibiryakovИ чо? Застрявшая транзакция принадлежит только одному из них. Название приложения,
создавшего этот коннект, видно в mon$attachments. Время её старта - тоже. Ты в своём
приложении неспособен вести лог действий, включая старты и финиши транзакций?..
Название приложения будет почти всегда одинаковое. В самом приложении - минимум два подключения, в одном из которых всегда висит readonly транзакция,
+ к нему подключены куча плагинов, каждый из которых открывает как минимум одно подключение.

Нет, увы, не способен :(. Если бы изначально пришла идея в функцию старта транзакции вставить лог (ну и завершать тоже с логом) - тогда другое дело. Но эта идея тогда не пришла, а теперь, когда уже 60 мегабайт только файлов *.pas и *.dfm - это сделать вообще проблематично :(
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38560000
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovвопрос бредовый, локи и мусор никак не связаны с уровнем изоляции транзакций.
Не отрицаю, но мой изначальный вопрос (в топике) был таков: "В чём "на самом деле" проблема?". Так как прямого ответа на него я так и не получил (ибо алгоритм, который я привёл - по логике правильный, и по идее должен работать без проблем вечно), то я продолжаю подозревать, что "на самом деле" проблема была в том, что после каждого RollBack в базе оставались и накапливались версии записи с соответствующим идентификатором транзакции, которая rolled back, и со временем весь этот механизм мог начать тормозить или ещё как-то глючить.

Потому я Вас и прошу ответить - подобного мусора снанет меньше при SELECT FOR UPDATE WITH LOCK?
А как уровень изоляции мне может помочь в этом случае, я честно говоря, пока вообще не особо понял, т.к. меня интересует в логике просто блокировка записи. Т.е. я не понимаю, чем rec_version хуже no_ rec_version для данной задачи (т.е. получить исключение deadlock). Потому и прошу объяснить.
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38560002
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockтеперь, когда уже 60 мегабайт только файлов *.pas и *.dfm - это сделать
вообще проблематично :(
Да ну? Кинуть всего на одну форму всего один TIBMonitor для тебя проблематично?.. Ню-ню...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38560023
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovДа ну? Кинуть всего на одну форму всего один TIBMonitor для тебя проблематично?.. Ню-ню...
Да, если переделать все во всех коннекшены - установить traceflags. Затем разбирать текст в сообщении. Но что я получу? Количество открытых транзакций? Их может быть несколько, и это нормальная ситуация. Т.е. как это может помочь, непонятно. Более того, я получу эту инфу после того, как везде обновится версия, а затем проявится проблема (проявится и засветится, что не одно и тоже - чаще всего молчат).

Поэтому я всё же прошу Вас ответить на вопросы в моём предыдущем посте.
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38560088
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock как с BDE перевел на IBX, а никак не помогает - не могу всё запомнить.
да что там запоминать-то...
YuRockЯ деньги платить не буду. Даже за дельные советы.
ну и нафиг. сам учиться не хочу, деньги платить не хочу, значит в сад. Я уже предложения по мониторингу изложил.
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38560132
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockмой изначальный вопрос (в топике) был таков: "В чём "на самом деле"
проблема?". Так как прямого ответа на него я так и не получил
А ты всерьёз на него рассчитывал?.. Что, прямо так: без анализа логов, без знания твоего
кода, последовательности работы и т.п. ткнуть пальцем и сказать "здесь проблема"?.. Так не
бывает. (Не, один раз в жизни мне это удалось, но там случай был особый.)

YuRockподобного мусора снанет меньше при SELECT FOR UPDATE WITH LOCK?
Нет.

YuRockчем rec_version хуже no_rec_version для данной задачи (т.е. получить
исключение deadlock).
Тем, что вызывает меньше deadlock, которые ты так жаждешь получать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38560155
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvда что там запоминать-то...

Говорит человек, написавший все эти статьи :)

kdvYuRockЯ деньги платить не буду. Даже за дельные советы.
ну и нафиг. сам учиться не хочу, деньги платить не хочу, значит в сад. Я уже предложения по мониторингу изложил.
[/quote]
kdv, ну не сдержался я. Человек мне начал довать советы (при чем абсолютно бессмысленные) по оптимизации репликациции базы. При чём это к топику? Я извиняюсь еще раз.

В сад так в сад. Советы - советами, одним я воспользовался (о SELECT FOR UPDATE WITH LOCK) - большое спасибо. Жаль, что потом не получил ответов ни на один из своих вопросов.
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38560160
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
уже частично получил.
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38560162
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovТем, что вызывает меньше deadlock, которые ты так жаждешь получать.
В смысле - меньше? Как deadlock может быть больше или меньше?
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38560178
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, я понял. Имеется в виду - реже :), т.к. при чтении (без FOR UPDATE WITH LOCK) не бывает deadlock-ов при rec_version.

Но у меня-то чтений и нет. Так чем же в моём случае rec_version хуже no_rec_version?
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38560180
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockВ смысле - меньше? Как deadlock может быть больше или меньше?
no_rec_version порождает deadlock и в ситуациях, где rec_version этого не делает.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38560185
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockНо у меня-то чтений и нет
это ты так думаешь
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38560206
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrэто ты так думаешь
Спасибо, что уделили внимание моей теме. Я так понял, это намёк на то, что перед update выполняется много чтений в любом случае, используя текущую транзакцию.

В любом случае, всем спасибо. Переделал на SELECT FOR UPDATE WITH LOCK, + изменил rec_version на no_rec_version. Отдал на тестирование/обновление.

Если в ближайшие несколько месяцев проблема не повторится, значит - помогло. Если повторится - приду сюда снова и доказательства принесу - полные логи с TIBSQLMonitor :)
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38560290
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock,

это намек на то, что update сначала читает, а потом уже пишет
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38560306
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockПеределал на SELECT FOR UPDATE WITH LOCK, + изменил rec_version на
no_rec_version.
Стекло протереть забыл, шаман хренов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38560348
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrэто намек на то, что update сначала читает, а потом уже пишет
Да, я приблизительно это и имел ввиду под "перед update выполняется много чтений в любом случае". Спасибо.
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38560367
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovСтекло протереть забыл, шаман хренов.
Не забыл - еще rollback на commit поменял.
Давайте не переходить на личности - я не любитель.

Если я раздражаю вопросами, ответы на которые можно получить перечитав статьи kdv - извините, такой я человек, я не могу осмыслить и запомнить сразу много информации, не попробовав всё сам на примерах и не прочувствовав, как это работает. И не понаступав на грабли, на что времени нет.
Остаётся в памяти только то, с чем сталкивался и чем пользуюсь.

Что касается логирования транзакций - та же проблем со временем. И отсутствие целесообразности применительно к данному примеру (транзакция может не откатиться только в случае, если программа зависла, чего не бывает никогда).
Но на будущее, конечно, сделаю. Хотя TIBSQLMonitor и не даёт параметров транзакции, всё равно будет полезно.

Так что меня тоже можно понять.
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38560371
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockЕсли я раздражаю вопросами, ответы на которые можно получить перечитав статьи
kdv - извините
Ты раздражаешь изменением случайных кусков кода в случайном направлении без анализа причин
проблемы. Это не поддаётся извинению.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38561489
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovбез анализа причин
проблемы
Как без анализа? Я в самом начале написал, что причина может быть только в некорректной (не совсем корректной) работе с базой. Т.к. причины в логике программы быть не может, т.к. тогда зависала бы программа, чего не бывает.
Вот поэтому я и изменил работу с базой.

Что я сделал нелогично? Я не вижу других причин, кроме двух - в логике и в базе.

Надо что-то делать. Выхода из ситуации вижу три:
1. Если причина в логике - изменить логике (что я не сделал, т.к. тут ошибок нет);
2. Если причина в базе - изменить работу с базой;
3. Сменить профессию - с одной стороны - уже поздно, с другой - пока рано.

Вот такой анализ. Бред? Если по Вашему - да - прошу не отвечать.
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38561491
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockТ.к. причины в логике программы быть не может, т.к. тогда зависала бы программа

сильная гипотеза... а у неё доказательства есть ?

Код: sql
1.
2.
function Summa( x, y: integer): integer;
begin Result := x + x; end; 



Вот тебе программа, складывающая два числа. Она не зависает. А проблeма в логике есть.
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38561495
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockЧто я сделал нелогично?
Ты не стал копать вглубь и выяснять какая последовательность действий приводит к проблеме.
Или хотя бы выяснить где именно возникает проблема. Ты просто увидел сообщение об ошибке
deadlock и решил, что оно возникает там, где ты ожидаешь получение deadlock. Извини, не
все баги настолько глупы, чтобы сидеть там, где ты их ожидаешь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38561502
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockДа нет, этот алгоритм работает. Только до поры - до времени.

Т.е. твоя логика программирования - всё везде работает, пока не доказана ошибка.

Это испорченная логика, она привела к тебя к проблеме, а ты даже примерно не можешь угадать где она кроется.

Нормальная логика "не работает ничего и нигде, пока недоказано что ошибок нет"

То что ты написал - это примерно как

"Я перехожу дорогу не глядя по сторонам. Были статьи, где писали всякую чушь, что надо искать специальной место, какие-то специальные лампочки - но там слишком много написано, это мне не помогает, не могу запомнить. Ну и не надо, я просто подхожу к дороге и сразу её перехожу. Все работает, алгоритм правильный. Только до поры - до времени."

Вот у тебя "до поры до времени" и случилось.

И по большому счёту у тебя теперь два пути.

Один подход паскалевский: "сомневайся во всем." От самых корней и выше доказывай, что твоя программа правильная. Где не сможешь доказать - там и ошибка, или одна из. Откуда начинать теюе уже сказали - найди транзакцию, которая запись держит. Возникает дедлок - прочитай ВСЕ транзакции и сохрани их в файл и чтобы тебе этот файл присылали после таких проблем. Это ещё противнее, чем читать статьи, но в среднем это быстрее.

Другой подход: "Часы я потерял в деревне, но искать буду в городе, тут светлее". Если повезет - найдешь что-чьи-нибудь часы быстро и не напрягая мозги. И на неделю проблема спрячется. А потом вылезет в другом месте. А потом в третьем. И т.д. Но ты можешь оказаться везунчиком и решить проблему с первой попытки.

В первом случае тебе могут помочь хотя бы советами. Во втором - только пожелать удачи. Выбирать тебе.
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38561508
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovувидел сообщение об ошибке
deadlock и решил, что оно возникает там, где ты ожидаешь получение deadlock
ну естественно, т.к. больше нигде нет обращений к этой записи. Только при запуске чтение кое-каких данных из неё (та транзакция тоже закрывается, естественно), а потом был только этот update.

Итак, где именно я выяснил (не придумал, правда). Последовательность действий - пользователь пытается сделать некую операцию, чем запускает код, написанный в первом посте. Т.к. для этого ничего другого нельзя сделать.

Естественно, я это всё знал перед тем, как зайти на этот форум. К чему эти выражения - "копать вглубь" и т.д.?
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38561513
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockт.к. больше нигде нет обращений к этой записи

т.е. по вашему запускается только один единственный экземпляр программы на одном единственном компьютере, а счама эта функция не может быть вызвана дважды ни через рекурсию (TDataSet.Onxxx, Application.ProcessMessages и прочие фишки) ни через многопоточность ?

YuRockта транзакция тоже закрывается, естественно
И в этом вы тоже уверены. И еще уверены, что закрывается сразу, а не через час.

Если вы действительно это все доказали, то случилось, что-то удивительно и редкое. Так бывает. Но чаще бывает, что уверенность программиста, все эти "естественно" - оказалось ошибочной.


YuRockЕстественно, я это всё знал
В таком случае вы можете это доказать и другим и себе, например просмотрев список транзакций во время ошибки. И дальше шаг ща шагом искать место, где "естественно" не сыграло.
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38561514
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochнайди транзакцию, которая запись держит...

В первом случае тебе могут помочь хотя бы советами. Во втором - только пожелать удачи. Выбирать тебе.
Эта транзакция может быть только одна - больше в проекте нет обращений к этой записи. И эта транзакция может не завершиться только в случае, если действие, выполняемое между update и rollback зависнет, но тогда и программа зависнет (т.к. это основной поток), чего не бывает.

Впрочем, я всё это уже не раз писАл, но ты, я так понял, мало читаешь - больше пишешь. Тебе наверно можно посоветовать больше читать, меньше писать.
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38561517
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochт.е. по вашему запускается только один единственный экземпляр программы на одном единственном компьютере, а счама эта функция не может быть вызвана дважды ни через рекурсию (TDataSet.Onxxx, Application.ProcessMessages и прочие фишки) ни через многопоточность ?
нет, это всё не по-моему. Дальше, я так понял, всё отчасти строится на этом утверждении (неверном), т.ч. на остальное отвечать уже не буду.
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38561520
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock,

Если ты из того же Донецка, что и я - можешь подойти, я на пальцах/примерах покажу ;)
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38561523
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockЭта транзакция может быть только одна
YuRockнет, это всё не по-моему.

Ты сам себе противоречишь. Впрочем, удачи тебе в попытках наугад припрятать ошибку ещё сильнее. Раньше или позже это получится и случаться она будет, например, раз в месяц. И всем будет хорошо.
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38561525
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster,

Спасибо, но боюсь меня в твой офис не пустят ;)
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38561526
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

Когда я говорил, что она может быть одна, конечно, имел ввиду, что она может быть только "эта" - с именем объекта trLock.

Если и это непонятно - действительно, о чем дальше говорить.
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38561530
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockЭта транзакция может быть только одна - больше в проекте нет обращений к этой
записи.
В сообщении об ошибке не указывается на какой записи она возникла. Почему ты уверен, что
она возникает именно при обращении к этой записи?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38561532
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockс именем объекта trLock.

Это выражение не имеет смысла. Но поскольку ты тут самый умный, то едва ли мы можем тебя чему-то учить.

Возможно, тебе действителньо стоит побиться лбом об стену пару недель, прежде чем ты признаешь, что программа работает не так, как ты себе придумал. А может быть тебе повезёт случайно спрятать ошибку и не менять своей самоувренности.

Я тебе написал несколько причин, почему может быть несколько транзакций, дёргающих эту запись, и это еще не все причины, а только самые очевидные. Тебе ещё раньше написали, как это проверить.
Но проверять ты не хочешь, тебе кажется, что твоё воображение, как работает программа, полностью соответствует реальности. Не вопрос, имееш ьправо искать ошибку так, как проще, а не так, как эффективнее.
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38561555
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovВ сообщении об ошибке не указывается на какой записи она возникла. Почему ты уверен, что
она возникает именно при обращении к этой записи?
Блин, ну потому, что она возникает, только когда пользователь, грубо говоря, нажимает на кнопку, по которой выполняется код, который я привёл в 1-м посте! Иначе зачем бы я его приводил - просто пофилософствовать?
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38561561
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochЭто выражение не имеет смысла.

Ну ясно. Понять предложение "транзакция с именем объекта trLock" как "транзакция, созданная объектом с именем trLock" нереально никак. Главное придраться.

В твоём сообщении вообще нет смысла - ты в который раз повторяешь бессмысленные утверждения, которые ты уже писал ранее. И разбавляешь их заумными философскими советами.

AriochНо поскольку ты тут самый умный
Я? Я вообще ничего не понимаю. Ни в футболе, ни в программировании, ни в математике... И бумажки даже соответствующие есть. Потому и на форум пришел вопросы задавать, а не людей учить.
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38561563
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockDimitry SibiryakovВ сообщении об ошибке не указывается на какой записи она возникла. Почему ты уверен, что
она возникает именно при обращении к этой записи?
Блин, ну потому, что она возникает, только когда пользователь, грубо говоря, нажимает на кнопку, по которой выполняется код, который я привёл в 1-м посте! Иначе зачем бы я его приводил - просто пофилософствовать?
Да, и еще. Запись эта получается фильтром по идентификатору поля первичного ключа, т.ч. update идет по-любому по одной записи.

Если Вы это имели ввиду.
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38561582
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockсозданная объектом с именем trLock

Эта фраза тоже не имеет смысла. И да, это не просто придирка на пустом месте, это тебя ещё и ещё раз подвожу к тому, что

1. программ много
2. бывает рекрсия.
3. бывают утечки памяти - в виде потерянных живых объектов

YuRockПотому и на форум пришел вопросы задавать, а не людей учить.

Тебе уже несколько человек сказали, что проверять. И все они более-менее согласны и говорят об одном.

Ты им всем сказал "я не буду это проверять. Я лучше вас знаю, что может и что не может случиться в моей программе".


Так каких же советов ты якобы просишь, если ты их все отвергаешь?
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38561583
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockИначе зачем бы я его приводил

И кстати, ты его не привёл. Ты привёл какие-то обрезки без описания какими объектами это всё пользуется, какие у них взаимосвязи и настройки, какие events они могут дёрнуть (а те дёрнут другие events и понеслось...) и т.д.
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38561586
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

Слушай, извини конечно, но хватит уже на меня бросаться.

Кто знает, здесь есть black-list? :)
...
Рейтинг: 0 / 0
Проблема с dead/lock после Rollback
    #38561591
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock,

Здесь есть NNTP, а дальше всё зависит от твоей читалки - есть в ней black list или нет

А я на тебя не бросаюсь, я тебе пытаюсь донести, что не всегда твоё мнение правильное. И не я один.
...
Рейтинг: 0 / 0
56 сообщений из 56, показаны все 3 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Проблема с dead/lock после Rollback
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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