Isc_database_info. Информация о транзакциях.
-
- Сообщения: 10
- Зарегистрирован: 03 сен 2012, 22:36
Isc_database_info. Информация о транзакциях.
Добрый вечер.
В своем приложении появилась необходимость отображения информации о транзакциях. Написав код, оказалось, что информация о NextTransaction не соответствует действительности (равна OldestActive/OldestSnapshot). Разработчики компонент доступа на своем форуме написали, что компоненты использует isc_database_info API функцию для получения статистики базы данных, которая возвращает некорректные данные об идентификаторах транзакций.
Версия сервера WI-V2.5.1.26351.
Кто сталкивался?
В своем приложении появилась необходимость отображения информации о транзакциях. Написав код, оказалось, что информация о NextTransaction не соответствует действительности (равна OldestActive/OldestSnapshot). Разработчики компонент доступа на своем форуме написали, что компоненты использует isc_database_info API функцию для получения статистики базы данных, которая возвращает некорректные данные об идентификаторах транзакций.
Версия сервера WI-V2.5.1.26351.
Кто сталкивался?
Re: Isc_database_info. Информация о транзакциях.
код IBX смотрели? какая версия Delphi ? насколько я в курсе, IBX в этом плане корректно работает, по крайней мере в 2006 и 2007. Вряд-ли IBDatabaseInfo менялся с тех пор.
-
- Сообщения: 10
- Зарегистрирован: 03 сен 2012, 22:36
Re: Isc_database_info. Информация о транзакциях.
Код IBX не смотрел. Они у меня не установлены. Использую компоненты доступа Devart IBDac.
Re: Isc_database_info. Информация о транзакциях.
Где этот форум ?SyntaXErr0r писал(а):Разработчики компонент доступа на своем форуме написали, что компоненты использует isc_database_info API функцию для получения статистики базы данных, которая возвращает некорректные данные об идентификаторах транзакций.
Re: Isc_database_info. Информация о транзакциях.
интересное кино. Тогда в студию:Использую компоненты доступа Devart IBDac.
- что выдает IBX - TIBDatabaseInfo
- что выдает IBDac
- что выдает gstat -h
кстати, на официальном (анг) форуме IBDac (devart) я никаких сообщений на эту тему не нахожу.
-
- Сообщения: 10
- Зарегистрирован: 03 сен 2012, 22:36
Re: Isc_database_info. Информация о транзакциях.
Извиняюсь за долгий ответ, не был на месте.
Кстати, запустил трэйс. Пишет, что:
Т.е. транзакция 29024451 уже подтверждена. Открываю консоль. Запускаю gstat:
Т.е Next transaction 29024451.
IBX, к сожалению, у меня нет, проверить не могу.- что выдает IBX - TIBDatabaseInfo
В IBDac значение совпадает с OldestActive (и OldestSnapshot).- что выдает IBDac
gstat -h - см. ниже.- что выдает gstat -h
kdv писал(а):кстати, на официальном (анг) форуме IBDac (devart) я никаких сообщений на эту тему не нахожу
Форум (тема) здесь. У них два форума официальных - английский и русский.hvlad писал(а):Где этот форум ?
Кстати, запустил трэйс. Пишет, что:
Код: Выделить всё
2012-09-04T16:43:21.7340 (1728:01BAC484) START_TRANSACTION
Base.FDB (ATT_4219, SYSDBA:NONE, WIN1251, XNET:DELL)
C:\Program Files\HK-Software\IBExpert\ibexpert.exe:2908
(TRA_29024451, READ_COMMITTED | REC_VERSION | NOWAIT | READ_WRITE)
2012-09-04T16:43:21.7340 (1728:01BAC484) COMMIT_TRANSACTION
Base.FDB (ATT_4219, SYSDBA:NONE, WIN1251, XNET:DELL)
C:\Program Files\HK-Software\IBExpert\ibexpert.exe:2908
(TRA_29024451, READ_COMMITTED | REC_VERSION | NOWAIT | READ_WRITE)
0 ms, 1 write(s), 1 fetch(es), 1 mark(s)
Код: Выделить всё
Database "Base.FDB"
Database header page information:
Flags 0
Checksum 12345
Generation 29024653
Page size 8192
ODS version 11.2
Oldest transaction 28966734
Oldest active 29024450
Oldest snapshot 29024450
Next transaction 29024451
Bumped transaction 1
Sequence number 0
Next attachment ID 4229
Implementation ID 16
Shadow count 0
Page buffers 16384
Next header page 0
Database dialect 3
Creation date Oct 18, 2011 11:20:35
Attributes force write
Variable header data:
Sweep interval: 0
*END*
Re: Isc_database_info. Информация о транзакциях.
Регистрироваться там я не буду, так что пусть или сами приходят сюда (или в трекер, если уверены) со своим кодом, или ищут у себя таракана без нашей помощи.SyntaXErr0r писал(а):Форум (тема) здесь.hvlad писал(а):Где этот форум ?
Для проверки можно взять isql в котором show database использует ту же isc_database_info.
Это правильно.SyntaXErr0r писал(а):Кстати, запустил трэйс. Пишет, что:
...
Т.е. транзакция 29024451 уже подтверждена. Открываю консоль. Запускаю gstat:
...
Т.е Next transaction 29024451.
-
- Сообщения: 10
- Зарегистрирован: 03 сен 2012, 22:36
Re: Isc_database_info. Информация о транзакциях.
Почему так? Она же уже как бы всё...hvlad писал(а):Это правильно.
Последний раз редактировалось SyntaXErr0r 04 сен 2012, 21:32, всего редактировалось 2 раза.
Re: Isc_database_info. Информация о транзакциях.
нет - это как, вы его УДАЛИЛИ? IBX по умолчанию во все Дельфи входит, это закладка InterBase в палитре компонент.IBX, к сожалению, у меня нет, проверить не могу.
Впрочем, IBX можете не проверять, что-то я там не нашел получения номеров транзакций...
В любом случае, если бы isc_database_info так работал, то одна из моих программ работала бы некорректно. А этого нет. И она работает одним кодом со всеми версиями InterBase и Firebird. Значит проблема все же в IBDac.
Re: Isc_database_info. Информация о транзакциях.
х.з., почему у вас так. Next transaction всегда имеет номер как минимум +1 к Oldest Active, и уж точно НИКОГДА не равна Oldest Active или чему то еще. Потому что это номер, который будет выдан следующей новой транзакции.Почему так? Она же уже как бы всё...
-
- Сообщения: 10
- Зарегистрирован: 03 сен 2012, 22:36
Re: Isc_database_info. Информация о транзакциях.
Нет. Я при установке их не отмечал для установки. У знакомого программиста смотрел код IBX. Не нашел. Вы правильно написали. Разработчиков пригласил сюда.kdv писал(а):нет - это как, вы его УДАЛИЛИ? IBX по умолчанию во все Дельфи входит, это закладка InterBase в палитре компонент.IBX, к сожалению, у меня нет, проверить не могу.
Впрочем, IBX можете не проверять, что-то я там не нашел получения номеров транзакций...
В любом случае, если бы isc_database_info так работал, то одна из моих программ работала бы некорректно. А этого нет. И она работает одним кодом со всеми версиями InterBase и Firebird. Значит проблема все же в IBDac.
Re: Isc_database_info. Информация о транзакциях.
Пишите письма Джиму.SyntaXErr0r писал(а):Почему так?hvlad писал(а):Это правильно.
Так было всегда.
Неверующие сами изучают TRA_start и bump_transaction_id.
-
- Сообщения: 10
- Зарегистрирован: 03 сен 2012, 22:36
Re: Isc_database_info. Информация о транзакциях.
Адрес подскажите. Я его своим "спамом" замучаю.hvlad писал(а):Пишите письма Джиму.
Re: Isc_database_info. Информация о транзакциях.
мне кажется что любой, кто работает с Firebird или InterBase, должен знать автора InterBase - Джима Старки.Адрес подскажите. Я его своим "спамом" замучаю.
http://en.wikipedia.org/wiki/Jim_Starkey
И, писать ему письма бесполезно, он уже давно не занимается IB, а ФБ не занимался тем более.
не припомню, чтобы IBX можно было НЕ устанавливать. Впрочем, для данного вопроса это не важно.Я при установке их не отмечал для установки.
-
- Сообщения: 10
- Зарегистрирован: 03 сен 2012, 22:36
-
- Сообщения: 10
- Зарегистрирован: 03 сен 2012, 22:36
Re: Isc_database_info. Информация о транзакциях.
Всем спасибо за потраченное время на ответы.
Re: Isc_database_info. Информация о транзакциях.
получается, да. Увы.Юмор не поняли.
проблема решилась? каким образом?Всем спасибо за потраченное время на ответы.
-
- Сообщения: 10
- Зарегистрирован: 03 сен 2012, 22:36
Re: Isc_database_info. Информация о транзакциях.
К сожалению пока нет. Временно отложил.проблема решилась? каким образом?
-
- Сообщения: 10
- Зарегистрирован: 03 сен 2012, 22:36
Re: Isc_database_info. Информация о транзакциях.
Хм. Это правда, что утилита gstat читает идентификаторы транзакций напрямую из файла базы данных без подключения к ней? Публикую ответы разработчиков IBDac (с ихнего разрешения):
---
Мы более глубоко исследовали данную проблему. IBDAC при соединении с базой получает ее данные, при этом стартуется и завершается транзакция. Если хотя бы одна транзакции была начата в текущей сессии, вызов isc_database_info в этой сессии возвращает в Oldest Transaction идентификатор этой транзакции, а Oldest Active, Snapshot и Next Transaction - идентификатор этой транзакции плюс один. Это поведение Firebird, мы не можем повлиять него.
---
Могу добавить что я также проверил несколько сторонних компонент и все ведут себя одинаково. До использования транзакций в сессии идентификаторы получаются корректные, после - некорректные (вполне возможно что это корректное поведение Firebird).
И еще, утилита gstat читает идентификаторы транзакций напрямую из файла базы данных без подключения к ней (в отличии от других компонент и утилит для работы с Firebird).
---
Вот такие пироги...
---
Мы более глубоко исследовали данную проблему. IBDAC при соединении с базой получает ее данные, при этом стартуется и завершается транзакция. Если хотя бы одна транзакции была начата в текущей сессии, вызов isc_database_info в этой сессии возвращает в Oldest Transaction идентификатор этой транзакции, а Oldest Active, Snapshot и Next Transaction - идентификатор этой транзакции плюс один. Это поведение Firebird, мы не можем повлиять него.
---
Могу добавить что я также проверил несколько сторонних компонент и все ведут себя одинаково. До использования транзакций в сессии идентификаторы получаются корректные, после - некорректные (вполне возможно что это корректное поведение Firebird).
И еще, утилита gstat читает идентификаторы транзакций напрямую из файла базы данных без подключения к ней (в отличии от других компонент и утилит для работы с Firebird).
---
Вот такие пироги...
Re: Isc_database_info. Информация о транзакциях.
да, если указано только gstat -h. И это делает ТОЛЬКО gstat.Это правда, что утилита gstat читает идентификаторы транзакций напрямую из файла базы данных без подключения к ней?
у нас есть утилита IBTM. Писал ее я. Утилита мониторит состояние транзакций в указанной БД - раз в минуту или другой интервал обращается к базе, получает состояние транзакций, и отсоединяется от БД. Информация сохраняется в файл логов.вызов isc_database_info в этой сессии возвращает в Oldest Transaction идентификатор этой транзакции, а Oldest Active, Snapshot и Next Transaction - идентификатор этой транзакции плюс один. Это поведение Firebird, мы не можем повлиять него.
Получение состояния транзакций в IBTM производится тремя способами
- стандартный, работает со всеми версиями InterBase и Firebird, через isc_database_info
- через services api, текст как gstat -h парсится
- через tmp$transactions для InterBase 7.x и выше.
Всего файлов статистики (таких логов) накоплено с не менее 100 разных серверов. В основном статистика собиралась стандартным методом, через isc_database_info.
Вот пример, когда нет активных транзакций
9:47:00 PM,61651194,61651195,61651195,61651196
9:48:00 PM,61651455,61651456,61651456,61651457
9:49:00 PM,61651620,61651621,61651621,61651622
OIT, OST, OAT, Next.
Как видите, Next здесь +1.
Вопрос - что я делаю неправильно?
Возможно то, что в этом же коннекте я не стартую никаких других транзакций. Но это я могу проверить. И также это можете проверить вы (быстрее, чем я). Или в IBDac всегда активна хоть одна транзакция?
для вызова isc_database_info стартовать транзакцию не нужно.IBDAC при соединении с базой получает ее данные, при этом стартуется и завершается транзакция.