SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » Firebird, HQbird, InterBase » Непонятная транзакция
Непонятная транзакция [сообщение #568] Tue, 13 September 2022 14:43 Переход к следующему сообщению
ggreggory в настоящее время не в онлайне  ggreggory
Сообщений: 26
Зарегистрирован: July 2022
Junior Member
Приветствую знатоков и разработчиков!

WI-V3.0.7.33374 Firebird 3.0

Пытаюсь разобраться с периодическими блокировками. Включил трассировку.

Блокировка случилась. В тексте ошибки ссылка на номер транзакции 225895. В файле трассировки таковой не значится, сразу после 225894 идет 225896:

2022-09-13T11:57:32.6250 (1296:1CE01730) COMMIT_TRANSACTION
c:\DATABASE.FDB (ATT_2335, SYSDBA:NONE, UTF8, TCPv4:127.0.0.1/59261)
c:\PROGRAM.EXE:23888
(TRA_225894, READ_COMMITTED | REC_VERSION | NOWAIT | READ_WRITE)
0 ms, 1 fetch(es), 1 mark(s)

2022-09-13T11:57:42.7640 (1296:1CE01730) START_TRANSACTION
c:\DATABASE.FDB (ATT_2335, SYSDBA:NONE, UTF8, TCPv4:127.0.0.1/59261)
c:\PROGRAM.EXE:23888
(TRA_225896, READ_COMMITTED | REC_VERSION | NOWAIT | READ_WRITE)

Получается, трассировка не все транзакции обрабатывает?
Re: Непонятная транзакция [сообщение #569 является ответом на сообщение #568] Tue, 13 September 2022 14:49 Переход к предыдущему сообщениюПереход к следующему сообщению
sim_84 в настоящее время не в онлайне  sim_84
Сообщений: 84
Зарегистрирован: June 2022
Member
а почему ты решил, что 225895 не стартовала раньше, чем 225894 закоммитилась?
Re: Непонятная транзакция [сообщение #570 является ответом на сообщение #569] Tue, 13 September 2022 14:53 Переход к предыдущему сообщениюПереход к следующему сообщению
ggreggory в настоящее время не в онлайне  ggreggory
Сообщений: 26
Зарегистрирован: July 2022
Junior Member
sim_84 писал(а) Tue, 13 September 2022 14:49
а почему ты решил, что 225895 не стартовала раньше, чем 225894 закоммитилась?
Согласен, такое могло быть. Но я и через поиск 225895 искал. Нету.
Re: Непонятная транзакция [сообщение #571 является ответом на сообщение #570] Tue, 13 September 2022 14:59 Переход к предыдущему сообщениюПереход к следующему сообщению
ggreggory в настоящее время не в онлайне  ggreggory
Сообщений: 26
Зарегистрирован: July 2022
Junior Member
Самая первая транзакция, старт которой отразился в трассировке 216177. Самая последняя на сегодня (он продолжает писаться) - 227621. Т.е. она по-любому там должна была быть.
Re: Непонятная транзакция [сообщение #574 является ответом на сообщение #571] Tue, 13 September 2022 15:31 Переход к предыдущему сообщениюПереход к следующему сообщению
МП в настоящее время не в онлайне  МП
Сообщений: 137
Зарегистрирован: August 2022
Географическое положение: бурятский тун...
Senior Member
а я пишу старт транзакции (вместе с ATTACHMENT_ID, REMOTE_HOST и REMOTE_PROCESS) в таблицу.
и в случае конфликта выдаю юзеру инфо, с кем он пересёкся.
Re: Непонятная транзакция [сообщение #575 является ответом на сообщение #574] Tue, 13 September 2022 15:57 Переход к предыдущему сообщениюПереход к следующему сообщению
ggreggory в настоящее время не в онлайне  ggreggory
Сообщений: 26
Зарегистрирован: July 2022
Junior Member
МП писал(а) Tue, 13 September 2022 15:31
а я пишу старт транзакции (вместе с ATTACHMENT_ID, REMOTE_HOST и REMOTE_PROCESS) в таблицу.
и в случае конфликта выдаю юзеру инфо, с кем он пересёкся.
1) Для этого достаточно ATTACHMENT_ID и фиксация его один раз при старте коннекта. И получить ATTACHMENT_ID по TRANSACTION_ID в момент ошибки по "SELECT tr.mon$attachment_id from mon$transactions tr where tr.mon$transaction_id = ?".
2) Транзакций из "in autonomous transaction" всё равно в этой таблице не будет.
Re: Непонятная транзакция [сообщение #576 является ответом на сообщение #575] Tue, 13 September 2022 16:05 Переход к предыдущему сообщениюПереход к следующему сообщению
МП в настоящее время не в онлайне  МП
Сообщений: 137
Зарегистрирован: August 2022
Географическое положение: бурятский тун...
Senior Member
ggreggory
1) Для этого достаточно ATTACHMENT_ID и фиксация его один раз при старте коннекта. И получить ATTACHMENT_ID по TRANSACTION_ID в момент ошибки по "SELECT tr.mon$attachment_id from mon$transactions tr where tr.mon$transaction_id = ?".
2) Транзакций из "in autonomous transaction" всё равно в этой таблице не будет.
у тебя все ходят в базу СИСДЫБОЙ?
Re: Непонятная транзакция [сообщение #577 является ответом на сообщение #568] Tue, 13 September 2022 16:22 Переход к предыдущему сообщениюПереход к следующему сообщению
hvlad в настоящее время в онлайне  hvlad
Сообщений: 44
Зарегистрирован: August 2022
Member
А сама ошибка (с номером тр-ции 225895) в трейс логе тоже есть ?
Можно это увидеть ? Нужна часть лога с момента старта тр-ции 225894 до ошибки.

Трейс может что-то "пропустить", если
а) у сессии трейса нет прав видеть сессию юзера, или
б) трейс настроен видеть конкретный коннект (см connection_id в fbtrace.conf), или
в) внутренний буфер сервера был переполнен и он приостанавливал сессию до тех пор, пока клиент не вычитает
данные и не освободит часть буфера (см. MaxUserTraceLogSize в firebird.conf).
Это не касатся аудита. В логе будут сообщения о приостановке сессии.
Re: Непонятная транзакция [сообщение #579 является ответом на сообщение #577] Tue, 13 September 2022 20:36 Переход к предыдущему сообщениюПереход к следующему сообщению
ggreggory в настоящее время не в онлайне  ggreggory
Сообщений: 26
Зарегистрирован: July 2022
Junior Member
hvlad писал(а) Tue, 13 September 2022 16:22
А сама ошибка (с номером тр-ции 225895) в трейс логе тоже есть ?
Можно это увидеть ? Нужна часть лога с момента старта тр-ции 225894 до ошибки.
Что удивительно, но и её нет.

Я использую IBExpert для запуска сессии трассировки. Предполагаю, что он работает через Service API и файл пишет самостоятельно. Так что может и IBExpert чудить.

Периодически встречаются в логе информация по перезапуску сессии:

2022-09-09T14:01:33.2590 (1296:0FFAA810) TRACE_FINI
	SESSION_1 IBE_09.09.2022 10:07:02
	
2022-09-09T14:01:33.3540 (1296:0FFAA810) TRACE_INIT
	SESSION_1 IBE_09.09.2022 10:07:02
Но сегодня днём, когда произошла блокировка, этих строк не было.

hvlad писал(а) Tue, 13 September 2022 16:22

Трейс может что-то "пропустить", если
а) у сессии трейса нет прав видеть сессию юзера, или
б) трейс настроен видеть конкретный коннект (см connection_id в fbtrace.conf), или
в) внутренний буфер сервера был переполнен и он приостанавливал сессию до тех пор, пока клиент не вычитает
данные и не освободит часть буфера (см. MaxUserTraceLogSize в firebird.conf).
Это не касатся аудита. В логе будут сообщения о приостановке сессии.
В момент когда были потерянные транзакции в логах попадался запрос вида:

SELECT (select result from PROCEDURE(...)), TBL.* FROM TBL

что вызывало огромное кол-во строк в логе:

2022-09-09T10:08:17.3740 (1296:01D6A910) EXECUTE_PROCEDURE_START
	C:\DATABASE.FDB (ATT_2120, SYSDBA:NONE, UTF8, TCPv4:192.168.0.17/49858)
	C:\PROGRAM.EXE:2668
		(TRA_216134, READ_COMMITTED | REC_VERSION | NOWAIT | READ_WRITE)

Procedure PROCEDURE:
param0 = ...
param1 = ...
время у всех одинаковое или различается на 1/1000-ую секунды.

Мне видится наиболее вероятным вариант с переполнением буфера. Я увеличил MaxUserTraceLogSize до 100 и исключил отображение вызовов процедур из трассировки.

Посмотрю что будет. Блокировка происходит раз в неделю примерно.
Re: Непонятная транзакция [сообщение #581 является ответом на сообщение #579] Tue, 13 September 2022 22:34 Переход к предыдущему сообщениюПереход к следующему сообщению
hvlad в настоящее время в онлайне  hvlad
Сообщений: 44
Зарегистрирован: August 2022
Member
ggreggory писал(а) Tue, 13 September 2022 20:36
hvlad писал(а) Tue, 13 September 2022 16:22
А сама ошибка (с номером тр-ции 225895) в трейс логе тоже есть ?
Можно это увидеть ? Нужна часть лога с момента старта тр-ции 225894 до ошибки.
Что удивительно, но и её нет.
Если вывод ошибок не включить в конфигурацию трейса (log_errors) - то это не удивительно.

ggreggory
Периодически встречаются в логе информация по перезапуску сессии:

2022-09-09T14:01:33.2590 (1296:0FFAA810) TRACE_FINI
	SESSION_1 IBE_09.09.2022 10:07:02
	
2022-09-09T14:01:33.3540 (1296:0FFAA810) TRACE_INIT
	SESSION_1 IBE_09.09.2022 10:07:02
Это не приостановка. Там другое сообщение.


ggreggory
Мне видится наиболее вероятным вариант с переполнением буфера. Я увеличил MaxUserTraceLogSize до 100 и исключил отображение вызовов процедур из трассировки.

Посмотрю что будет. Блокировка происходит раз в неделю примерно.
Т.е. неделю где-то висит запущенный с трейсом IBE ?
Не проще ли запустить fbtracemgr с перенаправлением в файл ?
Re: Непонятная транзакция [сообщение #584 является ответом на сообщение #581] Wed, 14 September 2022 10:29 Переход к предыдущему сообщению
ggreggory в настоящее время не в онлайне  ggreggory
Сообщений: 26
Зарегистрирован: July 2022
Junior Member
hvlad писал(а) Tue, 13 September 2022 22:34
Т.е. неделю где-то висит запущенный с трейсом IBE ?
Да.

hvlad писал(а) Tue, 13 September 2022 22:34

Не проще ли запустить fbtracemgr с перенаправлением в файл ?
Ок, обязательно попробую.
Предыдущая тема: Совместимость fbclient.dll от FB3 с fbclient.dll от FB2.5
Следующая тема: Как в приложении одновременно использовать fbembedded разных версий?
Переход к форуму:
  


Текущее время: Sun Dec 04 02:32:46 MSK 2022

Общее время, затраченное на создание страницы: 0.01438 секунд