gfix -shut full не отключает БД

Администирование клиентской и серверной части InterBase, Firebird, Yaffil. Настройка файла конфигурации и т.п.

Модераторы: kdv, Alexey Kovyazin

Ответить
seevi
Сообщения: 9
Зарегистрирован: 25 ноя 2011, 13:51

gfix -shut full не отключает БД

Сообщение seevi » 25 ноя 2011, 18:30

Здравствуйте.
При автоматическом еженедельном backup-restore примерно в трети случаев возникают проблемы. После вызова
gfix -shut full -force 0 localhost:db_alias
файл базы, видимо, иногда продолжает использоваться каким-то процессом, поскольку его не удается переименовать или удалить. Подскажите, пожалуйста, в чем тут дело и как это исправить? Может, надо просто подождать несколько минут, пока завершатся процессы сервера?
Однажды мне в одном подобном случае помог перезапуск сервера (net stop FirebirdServerDefaultInstance & net start FirebirdServerDefaultInstance), но последующие разы было хуже. После такого перезапуска существующие коннекты остаются, а новые пользователи подключиться не могут даже к другим базам на этом сервере (IBExpert при попытке подключиться выдает ошибку unavailable database), и этот способ, как оказалось, тоже не всегда позволяет разблокировать файл.
Конфигурация: Windows Server 2003, firebird classic 2.1.3.18185

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: gfix -shut full не отключает БД

Сообщение kdv » 26 ноя 2011, 02:47

не отключает.
первый совет, не относящийся к проблеме - апгрейд сервера до 2.1.4.
Ответ на вопрос - gfix -shut force всего лишь прекращает операции в коннектах, но не отключает коннекты, поэтому процессы ФБ (классик или суперсервер) продолжают держать файл БД открытым.

p.s. про unavailable database - скорее всего загибаете, там другая ошибка должна быть. все варианты unavailable
перечислены тут
www.ibase.ru/ibfaq.htm#unavail

seevi
Сообщения: 9
Зарегистрирован: 25 ноя 2011, 13:51

Re: gfix -shut full не отключает БД

Сообщение seevi » 26 ноя 2011, 15:19

Ответ на вопрос - gfix -shut force всего лишь прекращает операции в коннектах, но не отключает коннекты, поэтому процессы ФБ (классик или суперсервер) продолжают держать файл БД открытым.
Спасибо, так и подумал. В принципе, все, что мне нужно, - разблокировать файл БД, чтобы его можно было удалить, а на его место положить восстановленный. Для этого, видимо, надо завершить все процессы сервера, читающие базу. Есть, по-вашему, какой-нибудь способ сделать это?
Можно попробовать gfix -shut и задержку на 5 минут, но никаких гарантий. Можно еще через таблицы мониторинга узнать PID сервера для всех активных подключений и прибить их, но это требует написания скрипта. Полегче нет способа? :) Как-то не верится, что разработчики не предусмотрели утилиты для этого. Ничего подобного на http://www.firebirdsql.org/en/reference-manuals/ я не нашел
p.s. про unavailable database - скорее всего загибаете, там другая ошибка должна быть. все варианты unavailable
перечислены тут
http://www.ibase.ru/ibfaq.htm#unavail
Похоже, это один из багов fb 2.1.3 - почитал сейчас. Действительно надо обновиться и все проверить еще раз

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Re: gfix -shut full не отключает БД

Сообщение dimitr » 28 ноя 2011, 10:36

добавлю лишь, что шатдаун таки отключает коннекты начиная с версии 2.5. Если это так критично, можно подумать о переходе.

но IMHO проблема где-то в консерватории. Зачем вообще шатдаунить базу при бекап/ресторе? Контрольный рестор обычно делают в сторонке в другой файл, заменять оригинал базы отресторенной копией большого смысла нет.

seevi
Сообщения: 9
Зарегистрирован: 25 ноя 2011, 13:51

Re: gfix -shut full не отключает БД

Сообщение seevi » 28 ноя 2011, 12:46

но IMHO проблема где-то в консерватории. Зачем вообще шатдаунить базу при бекап/ресторе? Контрольный рестор обычно делают в сторонке в другой файл
Бэкап-ресторе выполняется ночью батником (сейчас на Perl переписываю с максимумом проверок на ошибки), т.к. днем руками я это не могу делать - много юзеров работает. Ресторится в посторонний файл, а затем происходит замещение старого файла новым.
, заменять оригинал базы отресторенной копией большого смысла нет.
Если есть способ без замены файла БД, буду очень рад его услышать. Пока пришло в голову править aliases.conf, переставлять элиас на восстановленный файл.
Погуглил на предмет "firebird backup/restore" - как-то глухо, предлагают скачать какой-то левый софт
добавлю лишь, что шатдаун таки отключает коннекты начиная с версии 2.5. Если это так критично, можно подумать о переходе.
Не, это нереально, т.к. я работаю в одном из множества филиалов, нарушится совместимость. Разве что до 2.1.4

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Re: gfix -shut full не отключает БД

Сообщение dimitr » 28 ноя 2011, 13:13

seevi писал(а):Если есть способ без замены файла БД, буду очень рад его услышать
способ чего? Бекап делается для наличия резервной копии. Рестор сразу после бекапа если и делается, то обычно в профилактических целях, чтобы убедиться в том, что из него можно создать базу без каких-либо неожиданностей. Для этого рестор делается с ключом "-c" и с другим именем базы. После чего полученная копия чаще всего удаляется. Зачем вам понадобилось заменять рабочий файл БД отресторенной копией, я не понимаю.

seevi
Сообщения: 9
Зарегистрирован: 25 ноя 2011, 13:51

Re: gfix -shut full не отключает БД

Сообщение seevi » 28 ноя 2011, 15:33

Сорри, что сразу не объяснил, как-то не подумал, что могут не понять :). Процедура, которую я описываю, - бэкап базы, восстановление из резервной копии и замещение старой базы в целях привести базу в порядок: уменьшить размер, перестроить индексы и прибрать мусор (хотя мусор можно и другими средствами).
Делать это раз в неделю - слишком часто, но делать надо, т.к. и бэкапы занимают меньше места (бэкапы делаются через nbackup, базы в несколько гигов), и ощутимо повышается производительность, а софт, с которым мы работаем (выбора, увы, нет), в плане работы с БД не идеален. Например, у нас документы сохраняются в базу по большей части в формате RTF, из-за чего занимают кучу места, и приходится периодически конвертировать их в doc

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Re: gfix -shut full не отключает БД

Сообщение dimitr » 28 ноя 2011, 15:39

seevi писал(а):уменьшить размер, перестроить индексы и прибрать мусор
при нормально настроенной сборке мусора уменьшать размер базы смысла никакого нет. Индексы перестраивать нет необходимости, достаточно пересчитывать им статистику. Рестор для этого не нужен. Аналогично про сборку мусора. Если у вас после бекапа-рестора увеличивается производительность, значит этого же результата можно добиться и без него. И забыть про ненужные проблемы с шатдауном. А то наблюдается сценарий из серии "сами себе создаем трудности, а потом мужественно их преодолеваем".

seevi
Сообщения: 9
Зарегистрирован: 25 ноя 2011, 13:51

Re: gfix -shut full не отключает БД

Сообщение seevi » 28 ноя 2011, 20:40

Ок, подумаю насчет сборки мусора. Я почему-то считал, что ее недостаточно.
Небольшой вопрос: у нас база используется для обмена информацией с оборудованием в реальном времени, и некоторые транзакции read commited могут быть активными без конца, хоть целый месяц (пока не сделается backup/restore). Разница между oldest active & next transaction за неделю достигает десятков миллионов. Я правильно понимаю, что пока они висят, неиспользуемые версии, накопленные в этом промежутке, убраны не будут?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: gfix -shut full не отключает БД

Сообщение kdv » 29 ноя 2011, 00:46

ПО ваше? Тогда никто не мешает прочитать статью про транзакции на ibase.ru, и установить для читающих транзакций параметры read read committed rec_version. В этом случае транзакция может быть активной хоть месяц, без влияния на накопление версий, несборку мусора, и производительность.
Разница между oldest active & next transaction за неделю достигает десятков миллионов.
это, простите, караул, это нужно лечить, немедленно. Если можете, пришлите статистику (вывод gstat -a -r) в zip/rar на support@ibase.ru. И сами ее посмотрите в IBAnalyst.
Я правильно понимаю, что пока они висят, неиспользуемые версии, накопленные в этом промежутке, убраны не будут?
статистика покажет, где чего висит и накапливается.

seevi
Сообщения: 9
Зарегистрирован: 25 ноя 2011, 13:51

Re: gfix -shut full не отключает БД

Сообщение seevi » 29 ноя 2011, 16:03

ПО нам пишут на заказ, я им уже сообщил о проблеме, сказал, чтобы использовали read only read committed - как раз вчера читал про это на http://www.ibase.ru/devinfo/utl.htm.
это, простите, караул, это нужно лечить, немедленно. Если можете, пришлите статистику (вывод gstat -a -r) в zip/rar на support@ibase.ru. И сами ее посмотрите в IBAnalyst.
Вот, а мы в таком режиме живем уже пару лет. На этой неделе статистика более-менее в порядке - софт часто запускают-останавливают, длинных транзакций не висит, через пару недель посмотрю, сколько накрутит. Думаю сделать пару скриптов для сохранения статистики во времени.
Скачал IBAnalyst Trial - честно говоря, не впечатлило, в IBExpert есть Database Statistics, который показывает ненамного меньше инфы, и информацию о версиях в том числе. Сегодня ставил эксперименты у себя на машине, еще немного продвинулся в понимании, как работает сборка мусора.
Я правильно понимаю, что пока они висят, неиспользуемые версии, накопленные в этом промежутке, убраны не будут?
Все так и оказалось

Думаю, тему можно закрывать. Благодарю отписавшихся за помощь, развеяли мои заблуждения

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: gfix -shut full не отключает БД

Сообщение kdv » 29 ноя 2011, 19:13

Скачал IBAnalyst Trial - честно говоря, не впечатлило, в IBExpert есть Database Statistics, который показывает ненамного меньше инфы, и информацию о версиях в том числе.
смешно даже сравнивать. IBExpert просто показывает статистику, а IBAnalyst еще и все объясняет, как хинтами, так и в отчете, и т.д.
Кстати, почему Trial? Тут на форуме ссылка на полную русскую версию 1.95, триалов у нас уже давно нет.

А кто делает софт, если не секрет? Мне интересно, как так получается, что эксплуататор ПО интересуется работой сервера больше, чем разработчики ПО.

seevi
Сообщения: 9
Зарегистрирован: 25 ноя 2011, 13:51

Re: gfix -shut full не отключает БД

Сообщение seevi » 30 ноя 2011, 12:40

Триал я добыл в гугле по первой ссылке, было вполне похоже на официальный сайт. Или триал, или платная версия за $200 - может поэтому меня и не впечатлило, т.к. большая часть подсказок там была в стиле "купите полную версию". Раздел с софтом на форуме я вообще не заметил :), посмотрю сегодня
Софт делает какая-то мелкая фирма, я подробностей не знаю, работаю всего пару месяцев. Интересоваться работой сервера приходится: место под бэкапы не резиновое, да и пользователи меня же достанут, если начнутся проблемы. А разработчикам пофигу, они баги по три месяца исправить не могут - меня вообще перестало что-либо удивлять после того, как я увидел структуру БД. Когда изначально кривая и переусложненная архитектура, баги можно править без конца

Ответить