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

Начало » Использование СУБД » Firebird, HQbird, InterBase » Сервер FB (5.0.1.1469 - 5.0.2.1583) иногда отдает не все записи из таблицы
Сервер FB (5.0.1.1469 - 5.0.2.1583) иногда отдает не все записи из таблицы [сообщение #5977] Fri, 14 March 2025 08:29 Переход к следующему сообщению
oleg_m в настоящее время не в онлайне  oleg_m
Сообщений: 3
Зарегистрирован: November 2024
Junior Member
Всем добрый день!
Пятница, наверно, самый лучший день для подобной темы.

Итак, проблема: Сервер FB (5.0.1.1469 - 5.0.2.1583) иногда отдает не все записи из таблицы.
Какую задачу решаю: имеется пакет dtsx, последовательно выгружающий данные из FB в MSSQL.

Запускается трижды в сутки в 06:07, 11:07 и 16:07. Пакет работает уже много лет, и на FB2.5.9 (и том же самом "железе") такой проблемы не возникало.

Воспроизвести проблему принудительно не получается.
Но в какой-то момент, пока проблема проявлялась, удалось увидеть следующую картину из IBExpert:

SELECT * FROM C_SYS_USER WHERE id>?;
При первом вызове выдает на одну запись меньше, чем должен.
Повторный запуск того же запроса, в той же транзакции, выдает все записи.

Конечно, я подумал про битый индекс, и сразу сделал:

SELECT * FROM C_SYS_USER WHERE id+0>?;
Эффект сохранился. Я сделал тогда

SELECT * FROM C_SYS_USER;
То же самое, при первом запуске одной строки не хватает.

Я подумал - сетевой протокол теряет одну запись?
Тогда еще упростил запрос:

SELECT COUNT(*) FROM C_SYS_USER;
Эффект сохранился. Сетевой протокол ни при чём.
Статистика показывала, естественно, что при втором запуске "чтений с диска в кэш" уже не было.
При чтении с диска в кэш и выдаче результата одна запись пропускается, а потом при чтении этого же набора сразу из кэша - нет? Бред какой-то.

Дальше у меня идеи кончились, да и эффект перестал воспроизводиться из IBExpert.

Таблица C_SYS_USER - это справочник. В ней никогда не делается DELETE FROM, так спроектировано, поэтому никто не мог удалить и вставить запись, пока я проверял общее количество записей.

Как выяснилось позже, проблема с "пропуском" записей проявляется не только на этой таблице, но еще как минимум на двух, таких же справочниках.

Чтобы разобраться ситуации, сделали расписание, которое запускается раз в минуту, подсчитывет количество в трех таблицах, и записывает результат в новую таблицу - лог.
С 12.02 по 20.02 количества были стабильными.
Затем вдруг 21.02, один раз в сутки, в 0:06, количество уменьшалось на 1. И так 8 дней подряд. Все 1439 запросов в течение суток - количество верное, один запрос - меньше на 1 запись.

28.02 начались частые сбои, а с 02.03 пропадали уже 3 записи (всегда одни и те же первичные ключи), воспроизводилось все чаще и чаще. Пока сервер не презапустили 05.03
В разных таблицах эффект проявлялся в разное время, пропадало 1-3 записи.

С 05.03.2025 сбоев нет.
В воскресенье обновился до последнего на тот момент снапшота 5.0.3.1630. Жду повторений проблемы.

gfix проблем не находит.
В firebird.log ничего про проблемы с БД
Не верю что проблема в железе: FB2.5 - работал. И если бы проблема была с диском, что-то появилось бы в firebird.log
В качестве версии, перенес базу на другой раздел.

Что бы такого еще подготовить, чтобы диагностировать проблему и было что отправить в трекер?

Еще дополню: есть похожий пакет dtsx, который работает на том же сервере, но с другой базой. Проблем нет с момента запуска логирования 12.02, хотя до этого - появлялся.

[Обновления: Fri, 14 March 2025 08:30]

Известить модератора

Re: Сервер FB (5.0.1.1469 - 5.0.2.1583) иногда отдает не все записи из таблицы [сообщение #5978 является ответом на сообщение #5977] Fri, 14 March 2025 15:00 Переход к предыдущему сообщениюПереход к следующему сообщению
SD в настоящее время не в онлайне  SD
Сообщений: 433
Зарегистрирован: August 2022
Senior Member
Запускай аудит на эти таблицы и смотри что с ними вообще происходит. Особо внимательно - на последовательность старта и коммита транзакций. Пока что выглядит так, будто не читаются записи из незакоммиченных транзакций и это правильно. Ну и глюки в ODBC (которое ты не назвал, но которое скорее всего используется, ибо другие способы достучаться к FB из MS SQL сильно платные) тоже никто не исключал.
Re: Сервер FB (5.0.1.1469 - 5.0.2.1583) иногда отдает не все записи из таблицы [сообщение #5981 является ответом на сообщение #5978] Fri, 14 March 2025 23:45 Переход к предыдущему сообщениюПереход к следующему сообщению
oleg_m в настоящее время не в онлайне  oleg_m
Сообщений: 3
Зарегистрирован: November 2024
Junior Member
ODBC не используется, используется IBProvider, платный, хотя и старый. Но не стал его упоминать, т.к. ситуация воспроизводилась не долго из IBExpert. Я подумал, что если уж select count показывает проблему, то нет большой разницы - вернуть одно число в одной строке не важно, через какой драйвер.
Запись количества, которые я запустил по расписанию раз в минуту, тоже выполнялись просто из isql.

Аудит, смотреть транзакции. Попробую.
Re: Сервер FB (5.0.1.1469 - 5.0.2.1583) иногда отдает не все записи из таблицы [сообщение #5983 является ответом на сообщение #5981] Tue, 18 March 2025 12:39 Переход к предыдущему сообщениюПереход к следующему сообщению
dimitr в настоящее время не в онлайне  dimitr
Сообщений: 19
Зарегистрирован: July 2022
Junior Member
Валидацию базы сделать в момент воспроизведения ситуации.
Re: Сервер FB (5.0.1.1469 - 5.0.2.1583) иногда отдает не все записи из таблицы [сообщение #5985 является ответом на сообщение #5983] Sat, 22 March 2025 22:41 Переход к предыдущему сообщению
oleg_m в настоящее время не в онлайне  oleg_m
Сообщений: 3
Зарегистрирован: November 2024
Junior Member
dimitr писал(а) Tue, 18 March 2025 12:39
Валидацию базы сделать в момент воспроизведения ситуации.
Принято.
Предыдущая тема: fbclient.dll
Следующая тема: Полнотекстовый поиск для Firebird
Переход к форуму:
  


Текущее время: Sun Mar 23 23:17:32 GMT+3 2025

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