Access Violation, некорректное выполнение запросов или вызовов API, ошибки утилит командной строки, в общем все, что вам мешает работать
Модераторы: kdv, dimitr
-
Дмитрий
- Сообщения: 127
- Зарегистрирован: 26 окт 2004, 11:05
Сообщение
Дмитрий » 09 авг 2011, 11:40
Добрый день!
Появилась следующая проблема. Было массовое удаление записей из БД (около 8 млн.). Затем сам стартанул SWEEPER который работает до сих пор. При этом я не могу сделать backup. Вылезает deadlock. Ниже приведу фрагменты логов и разную другую инфу. Подскажите, как остановить сборку мусора и сделать backup?
Посмотрел что происходит на серевре. Помимо обычных пользователей работают:
COLLECTOR с 01.08.2011 08:42
SWEEPER с 05.08.2011 09:06
Дальше фрагмент лога при попытке сделать backup:
Код: Выделить всё
gbak: writing index IBE$LOG_FIELDS_IDX1
gbak: writing index IBE$LOG_FIELDS_IDX2
gbak: writing data for table IBE$LOG_FIELDS
gbak: ERROR: deadlock
gbak: ERROR: gds_$receive failed
gbak: Exiting before completion due to errors
Записи удалялись из IBE$LOG_FIELDS.
Статистика БД:
Код: Выделить всё
Database header page information:
Flags 0
Checksum 12345
Generation 385851
Page size 16384
ODS version 11.2
Oldest transaction 12432624
Oldest active 12485314
Oldest snapshot 12485314
Next transaction 12486174
Bumped transaction 1
Sequence number 0
Next attachment ID 113
Implementation ID 16
Shadow count 0
Page buffers 0
Next header page 0
Database dialect 3
Creation date Dec 11, 2008 16:57:34
Attributes force write
Variable header data:
Sweep interval: 20000
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 09 авг 2011, 15:08
При этом я не могу сделать backup. Вылезает deadlock.
точная версия сервера?
свип "остановить" нельзя. Можно попробовать остановить процесс сервера (корректно, не терминированием), после чего gfix-ом задать sweep interval в 0.
Судя по deadlock от бэкапа, свип на самом деле не работает, а "висит" на какой-то записи. Смотрите firebird.log, вдруг там повреждение БД.
p.s. collector всегда работает, он тут ни при чем.
-
Дмитрий
- Сообщения: 127
- Зарегистрирован: 26 окт 2004, 11:05
Сообщение
Дмитрий » 09 авг 2011, 15:31
kdv писал(а):точная версия сервера?
Инфа из IBExpert:
Версия сервера WI-V7.5.1.162
Размер файла БД 43260МВ (это на всякий случай)
kdv писал(а):Смотрите firebird.log, вдруг там повреждение БД.
В моем случае это interbase.log. Кроме следующих строчек никакого криминала, кроме ошибок 10054 нет.
Код: Выделить всё
DEPOZIT2 (Server) Mon Aug 08 12:01:33 2011
gds__free: attempt to release bad block
DEPOZIT2 (Server) Mon Aug 08 13:15:27 2011
Database: C:\DIVIDEND\DIVIDEND.GDB.IB
deadlock
Вроде как попытка освободить плохой блок. Что делать? Ждать, пока SWEEPER закончит работу? Или попробовать backup сделать с -g?
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 09 авг 2011, 18:09
Или попробовать backup сделать с -g?
бэкап нужно ВСЕГДА делать с -g, это даже стыдно обсуждать.
http://www.ibase.ru/devinfo/gbak.htm
дальше, при базе в 43 гига давно нужно было выставить Sweep interval в 0.
С deadlock возможно не повреждение базы, а какой-то внутренний сбой сервера (что-то такое припоминаю, но смутно, да и все равно если даже и баг, чинить 7.5 уже никто никогда не будет). Так что, придется делать серверу остановку сервиса interbase. Не терминирование, разумеется.
-
Дмитрий
- Сообщения: 127
- Зарегистрирован: 26 окт 2004, 11:05
Сообщение
Дмитрий » 10 авг 2011, 12:14
Спасибо! Все получилось. Вечером сделал бэкап с -g. Все прошло нормально. Остановил сервер. Запустил снова. Установил sweep interval в 0. SWEEPER снова стартанул, но через час прекратил работу. Сейчас все нормально.
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 11 авг 2011, 13:08
нужно было
- остановить сервер
- изменить свип интервал
- запустить сервер