powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FireDAC, Firebird: deadlock
36 сообщений из 36, показаны все 2 страниц
FireDAC, Firebird: deadlock
    #40051962
scorpion235
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Окружение:
Delphi 10.4.1
Firebird 3.0.7
FireDAC (TFDConnection, TFDTransaction, TFDQuery)

Основные настройки компонентов для доступа к базе данных:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
  object FDConnection: TFDConnection
  ...
  object FDTransactionSeveralOpers: TFDTransaction
    Options.Isolation = xiReadCommitted
    Options.AutoStart = False
    Options.AutoStop = False
    Options.DisconnectAction = xdRollback
    Connection = FDConnection
  ...
  object FDQuerySeveralOpers: TFDQuery
    BeforeOpen = FDQuerySeveralOpersBeforeOpen
    BeforeExecute = FDQuerySeveralOpersBeforeExecute
    Connection = FDConnection
    Transaction = FDTransactionSeveralOpers
  ...
  end


Вызываю хранимку, для определенных данных в самой хранимке генерируется исключение, на клиенте обрабатываю исключение, всё хорошо. Но при повторном запросе к этой хранимке возникает deadlock как будто предыдущая транзакция еще активна, не произошел rollback
Код: pascal
1.
2.
3.
[FireDAC][Phys][FB]deadlock
update conflicts with concurrent update
concurrent transaction number is 9204


Сам обработчик Delphi:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
FDQuerySeveralOpers.Transaction.StartTransaction;

...

try
  FDQuerySeveralOpers.ExecSQL;
except on e: Exception do
begin
  //разбор exception, вывод сообщения об ошибке
  
  ...

  if (FDQuerySeveralOpers.Transaction.Active) then
    DataMod.FDQuerySeveralOpers.Transaction.Rollback;

  exit;
end;
end;

DataMod.FDQuerySeveralOpers.Close; //в случае успеха
DataMod.FDQuerySeveralOpers.Transaction.Commit; //в случае успеха



Просьба подсказать как победить deadlock
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40051966
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scorpion235Просьба подсказать как победить deadlock

Во-первых, это не дедлок, а конфликт обновлений.
Во-вторых, включить аудит и смотреть когда и как реально транзакции заканчиваются.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40051977
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
09.03.2021 15:37, scorpion235 пишет:
> Просьба подсказать как победить deadlock

1. это не дедлок.
это конфликт при обновлении.
У Isolation = xiReadCommitted есть два режима: RecordVersion и NoRecordVersion.
какой выставлен у тебя?

2. смотри виновника в MON$TRANSACTIONS + MON$ATTACHMENTS
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40052076
scorpion235
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий

У Isolation = xiReadCommitted есть два режима: RecordVersion и NoRecordVersion.
какой выставлен у тебя?

Не вижу таких режимов. Где их можно выставить?
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40052081
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Немного не в тему, но алгоритм управления транзакцией должен быть таким
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
FDQuerySeveralOpers.Transaction.StartTransaction;
try
   ....
  FDQuerySeveralOpers.Transaction.Commit;
except
  FDQuerySeveralOpers.Transaction.Rollback;
  raise
end;
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40052107
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий

У Isolation = xiReadCommitted есть два режима: RecordVersion и NoRecordVersion.

FireDAC сам ничего не выставляет, то есть по умолчанию.
Далее, можно положить в TxOptions.Params - rec_version или no_rec_version.
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40052113
scorpion235
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

хороший стиль кодирования
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40052119
scorpion235
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Arefiev,

Перед стартом новой sql-операции помогла дополнительная проверка и ошибка ушла:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
  with (DataMod.FDQuery) do
  begin
    if (Active) then
      Close;

    if (Transaction.Active) then
      Transaction.Rollback;
  end;


  with (DataMod.FDQueryMultiple) do
  begin
    if (Active) then
      Close;

    if (Transaction.Active) then
      Transaction.Rollback;
  end;
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40052120
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
scorpion235,

почему Rollback? Тебе не нужно то, что предыдущий запрос выполнил?
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40052195
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scorpion235
помогла дополнительная проверка
И опять написана чушь

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
FDQuerySeveralOpers.Transaction.StartTransaction;
try
  FDQuerySeveralOpers.ExecSQL;
  try
     ....
  finally
    FDQuerySeveralOpers.Close;
  end;
  FDQuerySeveralOpers.Transaction.Commit;
except
  FDQuerySeveralOpers.Transaction.Rollback;
  raise
end;

И никаких проверок и зависимостей от наличия ошибок
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40052205
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
10.03.2021 11:24, _Vasilisk_ пишет:
> И никаких проверок и зависимостей от наличия ошибок

а raise то нафига?

не, конечно я понимаю что ты написал ему шаблон.
но он же будет теперь везде его пихать,
считая что так надо делать всегда.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40052225
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Arefiev
FireDAC сам ничего не выставляет, то есть по умолчанию.
очень плохо.
всё нужно задавать явным способом.
API Guide Isolation level describes the view of the database given a transaction as it relates to
actions performed by other simultaneously occurring transactions.
Valid isolation levels are:
  • isc_tpb_concurrency
  • isc_tpb_consistency
  • isc_tpb_read_committed , isc_tpb_rec_version
  • isc_tpb_read_committed , isc_tpb_no_rec_version
если ты не указываешь явно параметр для read_committed , то по умолчанию наивный ламер получает ЖОПУ.
API Guide isc_tpb_no_rec_version - the default refinement , specifies that
a transaction can only read the latest version of a row.
If a change to a row is pending, but not yet committed,
the row cannot be read.
что мы сейчас и наблюдаем.
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40052246
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий
а raise то нафига?

Просто втихую зароллбачить? :)
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40052254
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
10.03.2021 12:48, ъъъъъ пишет:
> Просто втихую зароллбачить? :)

втихую не надо.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40052256
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий
10.03.2021 12:48, ъъъъъ пишет:
> Просто втихую зароллбачить? :)

втихую не надо.

На то и raise.
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40052264
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
10.03.2021 12:54, ъъъъъ пишет:
> На то и raise.

ты слишком оптимистичен, если полагаешь, что у ламера стоит централизованный обработчик OnException

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40052272
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий,

какой же он ламер, он статьи на хабре (и т.д.) пишет: https://www.sql.ru/forum/1287320/delphi-samyy-bystryy-dataset-tjvmemorydata-tmemtableeh-tdxmemdata-tkbmmemtable
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40052274
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийты слишком оптимистичен, если полагаешь, что у ламера стоит централизованный обработчик
OnException

Он стоит в TApplication, этого достаточно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40052277
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
10.03.2021 13:16, ъъъъъ пишет:
> какой же он ламер, он статьи на хабре (и т.д.) пишет

на хабре одни питарасы! ©
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40052330
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Но не ламеры же.
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40052332
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъНо не ламеры же.

Наоборот. Именно этим ламеры и отличаются от чайников.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40052468
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не отменяя всего вышесказанного (по поводу транзакций и последующих поруганий), отмечу некоторую сугубую антиэстетику в упорно продвигаемом .Close в совокупности с .ExecSQL.))
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40052469
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F
Не отменяя всего вышесказанного (по поводу транзакций и последующих поруганий), отмечу некоторую сугубую антиэстетику в упорно продвигаемом .Close в совокупности с .ExecSQL.))
Ну правильно, зачем ему активным на сервере висеть.
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40052475
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock,

Кому висеть? =8-[ ]

Я спросил электрика Петрова:
— Для чего ты намотал на шею провод?
Петров мне ничего не отвечает,
Висит и только ботами качает.
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40052476
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
Dmitry Arefiev
FireDAC сам ничего не выставляет, то есть по умолчанию.
очень плохо.

Файрдак оставляет дефолтный режим изоляции / настройки транзакции, как он есть в БД. Достаточно один раз выставить в TFDConnection.TxOptions.Isolation и далее так и будет в приложении. Попытка установить некоторый дефолтный режим изоляции транзакции привела к тому, что у некоторых все пошло лесом, например в MySQL. Поэтому - дефолтный для СУБД А дальше - инструмент есть ... Нет мозгов - я не врачь ...
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40052479
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F
YuRock,

Кому висеть? =8-[ ]

Я спросил электрика Петрова:
— Для чего ты намотал на шею провод?
Петров мне ничего не отвечает,
Висит и только ботами качает.
Если там селективный запрос - то он останется открытым (и активным на сервере) до вызова Close.
Во всяком случае, в IBX так. А так как я других вариантов не вижу, то подозреваю, что здесь то же самое.
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40052480
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И даже попытка ввести "лучшую" по умолчанию изоляцию - не увенчалась успехом ... Каждому свое ... Так-что
очень правильно
PS: Суйте вилы FireBird, почему у них такая дефолтная изоляция.
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40052481
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Arefiev
И даже попытка ввести "лучшую" по умолчанию изоляцию - не увенчалась успехом ... Каждому свое ... Так-что
очень правильно
PS: Суйте вилы FireBird, почему у них такая дефолтная изоляция.
В FB уже нереально изменить поведение по умолчанию. Странно, что в компонентах прикрутить не получилось. Элементарный внутренний флажок IsDefaultIsolation мог бы помочь. Ну, мне так кажется.
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40052483
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Ну, мне так кажется.

Угу ... мне тоже ...
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40052486
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Если там селективный запрос - то он останется открытым (и активным на сервере) до вызова Close.
Во всяком случае, в IBX так. А так как я других вариантов не вижу, то подозреваю, что здесь то же самое.

Если там селективный запрос, то он открывается методом Open. В IBX в том числе.
Продолжай подозревать дальше.
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40052488
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F
YuRock
Если там селективный запрос - то он останется открытым (и активным на сервере) до вызова Close.
Во всяком случае, в IBX так. А так как я других вариантов не вижу, то подозреваю, что здесь то же самое.

Если там селективный запрос, то он открывается методом Open. В IBX в том числе.
Продолжай подозревать дальше.
Не знаю, как здесь, но в IBX нет метода TIBSQL.Open.
Т.ч. ты вначале сам расподозревайся.
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40052490
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Не знаю, как здесь, но в IBX нет метода TIBSQL.Open.
Т.ч. ты вначале сам расподозревайся.

Не, но у TIBSQL, положим, много чего нет, только при чем в данном контексте TIBSQL?
RTFM https://TFDQuery]https://TFDQuery]http://docwiki.embarcadero.com/Libraries/Sydney/en/FireDAC.Comp.Client.TFDQuery_Methods
Ну и для TIBQuery, если угодно (подозрительная ссылка!) http://docwiki.embarcadero.com/Libraries/Sydney/en/IBX.IBQuery.TIBQuery_Methods
P.S. Внимательнее, имхо, надо быть. Тем более, при продолжении дискуссии банкета.))
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40052497
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F
Не, но у TIBSQL, положим, много чего нет, только при чем в данном контексте TIBSQL?
А, там Query у ТС. Сорри, я не заметил из-за ExecSql (перепутал с ExecQuery). Вообще как по мне странно использовать датасет для этого.
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40052501
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Arefiev
YuRock
Ну, мне так кажется.

Угу ... мне тоже ...
Так а что, есть проблема, в зависимости от этого флажка, для Майскл ничего не делать, а для Фаерберд - костылик прикрутить на уровне ниже?
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40052556
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
11.03.2021 03:33, YuRock пишет:
> Так а что, есть проблема, в зависимости от этого флажка, для Майскл ничего не делать,
> а для Фаерберд - костылик прикрутить на уровне ниже?
>

угу.
из-за того, что FireDAC задуман как мегауниверсальная библиотека,
таких костылей нужно заготовить не одну дюжину.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FireDAC, Firebird: deadlock
    #40052808
scorpion235
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
Мимопроходящий,

он статьи на хабре (и т.д.) пишет: https://www.sql.ru/forum/1287320/delphi-samyy-bystryy-dataset-tjvmemorydata-tmemtableeh-tdxmemdata-tkbmmemtable


Случайно зашел в этот топик. Ошибка уже давно разрешена, а народ продолжает общение. И это здорово, что хотя бы так общаются люди.
У меня, как оказалось, даже почитатели есть. Нашли статью от 2018 года. Признаюсь, честно: неожиданно и приятно :)

Как говорил мой друг: "Народ, сколько же у вас свободного времени?" :))
...
Рейтинг: 0 / 0
36 сообщений из 36, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FireDAC, Firebird: deadlock
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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