powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Deadlock
8 сообщений из 8, страница 1 из 1
Deadlock
    #39483483
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FB 2.5.6. Сегодня во время работы база зависла, а спустя некоторое время стали выдаваться сообщения:
Код: plaintext
1.
Deadlock.
Deadlock.
И так у всех пользователей. В логе никаких сообщений не было. В течении десяти минут ситуация не исправилась. Пришлось останавливать процесс сервера:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SERVER (Server)	Thu Jul 06 08:44:51 2017
	Shutting down the server with 56 active connection(s) to 1 database(s), 0 active service(s)


SERVER (Server)	Thu Jul 06 08:45:02 2017
	Firebird shutdown is still in progress after the specified timeout


SERVER (Server)	Thu Jul 06 08:45:12 2017
	Timeout expired during remote server shutdown


SERVER (Server)	Thu Jul 06 08:46:26 2017
	INET/inet_error: read errno = 10054

Вопрос - что-то с обработкой Deadlock'ов случилось? Вроде же FB должен разруливать такие ситуации в штатном режиме.
...
Рейтинг: 0 / 0
Deadlock
    #39484136
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax,

Именно "Deadlock." и ничего больше? За 2.5 я уже ничего не знаю, но раньше deadlock поминался всуе при некоторых других ошибках, причём сначала поминался именно он, а реальная ошибка после него. Что точно помню - при неверном логине/пароле при присоединении, но и ещё что-то было.
...
Рейтинг: 0 / 0
Deadlock
    #39486273
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В это воскресенье ситуация повторилась. Удалил из таблиц в общей сложности больше двухсот миллионов строк (это происходило почти полтора часа, в это время другие пользователи добавили туда несколько строк), делаю коммит - и все, deadlock с периодическим выбросом у всех пользователей этого исключения. Попытался подключился fb_lock_print'ом к базе - он завис. Помогла остановка процесса сервера, которая на сей раз отработала мгновенно. Что самое интересное, SELECT после этого выдал только несколько десятков добавленных строк. То есть де-факто коммит произошел. Я могу попробовать воспроизвести такой deadlock в ближайшее время, но не знаю, имеет ли это смысл и что дальше с этим делать.
...
Рейтинг: 0 / 0
Deadlock
    #39486337
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMaxВ это воскресенье ситуация повторилась. Удалил из таблиц в общей сложности больше двухсот миллионов строк ... и что дальше с этим делать.

Дедлок это конечно не хорошо, но чисто из практики я бы не делал таких больших удалений за один раз.
Если требуется, я удаляю максимум по 50-100 тысяч записей, коммит, и потом селект с теми же параметрами что и delete - сразу соберем за собой мусор. И поведение получается гораздо предсказуемее.
...
Рейтинг: 0 / 0
Deadlock
    #39486429
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты когда такие массированные удаления делаешь, индексы отключай.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Deadlock
    #39489152
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если воспроизводить - то наверное на 2.5.7 а не 2.5.6
...
Рейтинг: 0 / 0
Deadlock
    #39498073
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сегодня очищал одну таблицу с миллионом записей, которую никто не использовал. Во время удаления случился deadlock на некоторых рабочих станциях. Здесь ситуация стала понятной. Дело в том, что программа один раз в пять минут обращается к серверу за новостями. Делается это в запущенной при подключении RO-транзакции. Исключение:
Код: plaintext
1.
2.
FormMain:
Deadlock.
Deadlock.
Причем никаких дополнительных сведений нет. По трейсу в EurekaLog отследил, что это при выполнении следующего кода модуля FIBQuery:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
    with Database.ClientLibrary do
    begin
      if not XDoForMDT then
      begin
        if (not Transaction.InTransaction) and
           (Transaction.MDTdeferredStart)  then
          Transaction.StartTransaction;
        Call(isc_dsql_alloc_statement2(SV, DBHandle,
                                        @FHandle), True);
    FSQLRecord.Count := 1;
        Call(isc_dsql_prepare(SV, TRHandle, @FHandle, 0, //<-- Исключение при вызове этого метода
                   PAnsiChar(FPreparedSQL ),
                   DataBase.SQlDialect,
         FSQLRecord.FXSQLDA
        ),
         True
        );


Поэтому в первом посте сообщение про Deadlock выдавалось периодически - по таймеру шло обращение к серверу, при подготовке возбуждалось исключение, а так как обращений к БД в событии было несколько, то они и генерировали эти исключения подряд.
Сегодня это удаление завершилось без проблем, и рабочие станции продолжили работу в нормальном режиме.

Итого получается, что во время удаления (или коммита удаления) что-то блокирует подготовку запроса. Вопрос к разработчикам: действительно ли в коде FB при подготовке выполняются какие-то действия, которые могут приводить к дедлоку?
...
Рейтинг: 0 / 0
Deadlock
    #39498169
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax,

теоретически может такое быть. Недавно исправлялся один похожий баг , там более специфический сценарий, но внешние симптомы аналогичные.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Deadlock
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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