Растет размер БД Firebird (совсем не линейно)

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

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

nbura
Сообщения: 11
Зарегистрирован: 05 сен 2011, 14:59

Растет размер БД Firebird (совсем не линейно)

Сообщение nbura » 05 сен 2011, 15:17

Добрый день! Есть следующая проблема:
есть БД, работает уже 3-4 года активно, ежедневный объем данных растет не значительно (в теории).
База до начала этого года была в пределах 10-12 Гб (Бекап 5-7 Гб). В этом году наблюдаю резкое увеличение прожорливости - прирост по 4-5 Гб в месяц, в результате БД = 40 Гб (бекап - 36 Гб). Делаю бекап-ресторе - максимум худеет на пару гектар. Ресторил на разных машинах, результат одинаковый. Попробовал сравнить статистику с начала года и на сегодня - разница по месту, занимаемого таблицами - была 2,5 Гб, стала 3,5 Гб грубо. (Т.е. никак не в 3-4 раза). Вроде индексы в пределах 3-ки. Подскажите, хоть в какую сторону копать, сам кодер, не чистый системщик (но админить приходится все равно все это мне), но в этот раз я не вижу решения.

П.С. БД крутится на HP ML350 3-летнем, под ASP Linux, Firebird 2.1.1 вроде бы (с пингвином совсем туго дружу, на уровне починить базу безопасности да запустить бекап-ресторе-гфикс).

П.П.С. ресторе на сервере почему-то делается часов 6-7, хотя на моей рабочей машинке (совсем печальный Целерончик под XP) делается 1,5 часа

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: Растет размер БД Firebird (совсем не линейно)

Сообщение hvlad » 05 сен 2011, 17:38

gstat -h покажите

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

Re: Растет размер БД Firebird (совсем не линейно)

Сообщение kdv » 05 сен 2011, 18:37

еще желательно с периодичностью в несколько дней получать gstat -a -r база -user ... -pass ... >stat.txt, и анализировать это дело IBAnalyst-ом (или сразу им получать статистику)

nbura
Сообщения: 11
Зарегистрирован: 05 сен 2011, 14:59

Re: Растет размер БД Firebird (совсем не линейно)

Сообщение nbura » 06 сен 2011, 11:48

Статистика заголовка

Код: Выделить всё

Database header page information: 
        Flags                   0 
        Checksum                12345 
        Generation              104714 
        Page size               16384 
        ODS version             11.1 
        Oldest transaction      609 
        Oldest active           610 
        Oldest snapshot         610 
        Next transaction        104706 
        Bumped transaction      1 
        Sequence number         0 
        Next attachment ID      129 
        Implementation ID       19 
        Shadow count            0 
        Page buffers            0 
        Next header page        0 
        Database dialect        3 
        Creation date           Sep 4, 2011 12:08:19 
        Attributes               
 
    Variable header data: 
        Sweep interval:         20000 
        *END* 
тут единственное что меня смущает - это "Next transaction", вчера был 61643 кстати. но на локальной копии, которую поднял для теста, этот параметр в норме, т.е. на единицу больше чем "Oldest snapshot" - но на размере базы это никак не сказалось - все также печально :)

Скажите, пожалуйста, как сюда корректно выложить файл полной статистики?
(хотя там кроме индексов и десятка пустых таблиц IBАнализатор вроде бы не жалуется особо)

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: Растет размер БД Firebird (совсем не линейно)

Сообщение hvlad » 06 сен 2011, 13:15

Сборка мусора остановлена, БД ничего больше не остаётся как только расти.

nbura
Сообщения: 11
Зарегистрирован: 05 сен 2011, 14:59

Re: Растет размер БД Firebird (совсем не линейно)

Сообщение nbura » 06 сен 2011, 13:36

я конечно профан честно говоря во всем этом, но в эту сторону начал копать на локальной копии. По пунктам - я взял бекап рабочей базы, восстановил на своем компе, сделал ручной gfix -sweep db.gdb, сделал бекап-ресторе на своем компе - Некст транзактион маленький, а вот результата по размеру так и не получил. Поэтому я и не стал делать сборку мусора ручную на рабочей базе (это возможно только в выходные или ночью, на всякий пожарный).

После Вашего замечания пошел еще разок внимательно перечитаю статьи про мусор.

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

Re: Растет размер БД Firebird (совсем не линейно)

Сообщение kdv » 06 сен 2011, 15:12

это "Next transaction", вчера был 61643 кстати.
значит за сутки надолбили 45 тысяч транзакций. Значит, базу ресторили из бэкапа примерно 2-3 суток назад. И судя по застрявшему Oldest transaction, возможно есть некие приложения, которые эти двое-трое суток подключены к базе.
Скажите, пожалуйста, как сюда корректно выложить файл полной статистики?
прислать в zip/rar на support@ibase.ru

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: Растет размер БД Firebird (совсем не линейно)

Сообщение hvlad » 06 сен 2011, 15:46

nbura писал(а):БД = 40 Гб (бекап - 36 Гб).
Это значит, что в БД примерно 36ГБ данных, не считая индексов и прочего.
nbura писал(а):Делаю бекап-ресторе - максимум худеет на пару гектар.
Ну так с чего бы ей худеть ?
nbura писал(а):Ресторил на разных машинах, результат одинаковый.
По капоту стучал ? Стёкла протирал ? :-)
nbura писал(а):Попробовал сравнить статистику с начала года и на сегодня - разница по месту, занимаемого таблицами - была 2,5 Гб, стала 3,5 Гб грубо.
А вот тут - подробнее. Что за статистика, как считается ?

nbura
Сообщения: 11
Зарегистрирован: 05 сен 2011, 14:59

Re: Растет размер БД Firebird (совсем не линейно)

Сообщение nbura » 06 сен 2011, 16:39

постараюсь ответить сразу двоим ув. собеседникам, чтобы лишний раз не флудить)
факты:
1. да, базу бекап-ресторнул в это воскресенье, база работает в обычное рабочее время, всегда ,кроме воскресенья (просто для справки).
2. база не моя, наследственная, стараюсь конечно в ней порядок по ходу дела наводить, но у предыдущего черта был свой, отдельный учебник по СУБД, с блджеком и прочими видать. Так что индексы были не те или не там, никаких внешних ключей, все запросы конструктором в иб эксперте, про доствшийся продукт на Делфи и говорить неохота. (даже не знаю, зачем я это написал, просто наболело видать :) )
3.
По капоту стучал ? Стёкла протирал ?
по поводу рестора на разных машинах - предположил, чтобы исключит вероятность кривой установки сервера или еще чего случайного.
4.
Ну так с чего бы ей худеть ?
наполнение базы идем, можно сказать пропорционально, объем ежедневных операций вырос, но не в разы, может в полтора раза, может чуть больше.
поэтому и вызывает недоумение, что за 3 года она доросла до 12 Гб, а за 8 месяцев сего года - уже 40Гб стала.
5.
Попробовал сравнить статистику с начала года и на сегодня - разница по месту, занимаемого таблицами - была 2,5 Гб, стала 3,5 Гб грубо.
А вот тут - подробнее. Что за статистика, как считается ?
результаты gstat выкинуты в таблицу, и просуммированы столбцы размера таблиц (понимаю что это не точные размеры данные, но просто хотел увидеть, откуда увеличение размера пошло)
6. на всякий случай кину на почту архив результатов статистики, честно говоря не понял из текста, будет он вам полезен или нет, если что удалите :)
7. Ночью ребутну сервис файербёрда на сервере для чистоты и сделаю gfix -sweep конечно же.

П.С. в принципе основная цель моих телодвижений - понять, БД должна быть такого размера при текущих данных, или есть необходимость её подчистить-подправить. Т.е. постараюсь зря не отнимать Ваше время.

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

Re: Растет размер БД Firebird (совсем не линейно)

Сообщение kdv » 06 сен 2011, 17:07

в результате БД = 40 Гб (бекап - 36 Гб)
в IBA я вижу чистых голых данных 1.8 гиг, индексов 1 гиг. Если база при этом 40 гиг (и бэкап 36), значит вывод очень простой - в базе 37 гиг БЛОБОВ. Картинок, документов, и прочего.
Даже если брать таблицы, фрагментированные блобами, то там выходит страниц с данными (не блобами) не более чем на 5 гиг.

Действительно, Oldest Active (не Oldest transaction, я ошибся) торчит уже 2 дня, т.е. эти два дня существует приложение с активной транзакцией, которая мешает сборке мусора. Мусор накопился в таблице
ER_T_ZAY_MAT - там 1.6 млн версий при 110к записей. Это может быть причиной тормозов.
Все это и многое другое прекрасно видно в IBAnalyst (в. т.ч. в Отчете).
Индексов тоже много ненужных (по именам видно, что созданных вручную, и имеющих 1 уникальное значение)

В общем, блобами заполнена ваша база. И чем дальше, тем их больше, и они больше.

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

Re: Растет размер БД Firebird (совсем не линейно)

Сообщение kdv » 06 сен 2011, 17:08

добавлю - может, в базу кто-то несколько фильмов залил? :-)

Alexey Kovyazin
Сообщения: 15
Зарегистрирован: 25 окт 2004, 19:13

Re: Растет размер БД Firebird (совсем не линейно)

Сообщение Alexey Kovyazin » 06 сен 2011, 17:59

Таблица construction_data имеет реальную фрагментацию в 1%, т.е. блобы заполонили наши улицы :).
Как это ни странно, может помочь уменьшение размеров страницы до 4к. Попробуйте.

С уважением,
Алексей Ковязин
IBSurgeon (www.ib-aid.com)

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

Re: Растет размер БД Firebird (совсем не линейно)

Сообщение kdv » 06 сен 2011, 20:42

не, Алексей, лучше не надо уменьшать размер страницы. Пусть "киборги - они захватили всю планету", но бОльших блобов-то все равно там 80% базы. И со страницей в 4к общая производительность может ухудшиться. Хотя, неизвестно, как приложение с этими блобами оперирует. Тем более что приложение "унаследованное", и ковырять его уже никто не будет, как я понял.

Вдогонку автору:
ресторе на сервере почему-то делается часов 6-7, хотя на моей рабочей машинке (совсем печальный Целерончик под XP) делается 1,5 часа
предположений 2
1. в контроллере сервера дисковый кэш выключен (WriteThrough вместо WriteBack). Либо просто выключен, либо батарейки нет, и т.д.
2. в винде рестор делается через лок. протокол, на линуксе - через tcp
см. http://www.ibase.ru/devinfo/restorespeed.htm
обратить внимание на линуксовую картинку. Там бэкап 1.5 гиг, результирующая база 4 гига.
На линуксе рестор по tcp в 4-5 раз медленнее локального протокола почему-то.

nbura
Сообщения: 11
Зарегистрирован: 05 сен 2011, 14:59

Re: Растет размер БД Firebird (совсем не линейно)

Сообщение nbura » 07 сен 2011, 13:10

Добрый день, уважаемые коллеги!
Итак, по порядку:
1. мусор ручками собрал, статистика заголовка выглядит теперь так

Код: Выделить всё

Database header page information: 
        Flags                   0 
        Checksum                12345 
        Generation              186518 
        Page size               16384 
        ODS version             11.1 
        Oldest transaction      160445 
        Oldest active           160446 
        Oldest snapshot         160446 
        Next transaction        186509 
        Bumped transaction      1 
        Sequence number         0 
        Next attachment ID      214 
        Implementation ID       19 
        Shadow count            0 
        Page buffers            0 
        Next header page        0 
        Database dialect        3 
        Creation date           Sep 4, 2011 12:08:19 
        Attributes               
 
    Variable header data: 
        Sweep interval:         20000 
        *END* 
2. С версионностью таблицы "ER_T_ZAY_MAT" разобрался, действительно, был мой косяк - был запрос, обнуляющий один столбец почти по всем записям, исправил условие, версии не плодятся.

3. Главный подозреваемый: таблица "construction_data" - по структуре - там используется одно блоб поле, ранее туда лились картинки (эти данные уже потерли давно), теперь льются EMF, что как бы гораздо экономичнее. И как раз размер этих файликов - от 3 до 10+ кб (подозреваю, что среднее около 5 -6 наверное). Записей в этой таблице, имеющих ненулевой блоб - около 100 000 (есть, кстати желание спросить шефа насчет удаления блобов допустим до 2009 года - это треть записей где-то).

Для эксперимента создал локальную тестовую базу только с этой таблицей, скопировал последнии 2500 записей. (для переноса использовал экспорт данных из запроса, собственно файл с данными - 25 метров, что подтверждает предположение о среднем размере Блобов+размер записи). Бекап тестовой базы - теже 25-26 метров, т.е все честно :) . Затем тестил восстановление с разными размерами страниц, логично, что уменьшение страницы в данном случае давало результат:
16к Page = 44 M DB
8к Page = 39 M DB
4к Page (и все что меньше) = 33 M DB

(Для справки, файл экспорта для всех данных этой таблице занял 500 М)

Соответсвенно напрашивается вопрос - есть смысл восстановить БД с размером 8 или 4? Если учесть, что остальные блобы практически не влияют на размер, их там по пальцам?

4. Вопрос немного не по теме - есть ли смысл включать синхронный режим (Forced Write) в моем случае?

nbura
Сообщения: 11
Зарегистрирован: 05 сен 2011, 14:59

Re: Растет размер БД Firebird (совсем не линейно)

Сообщение nbura » 07 сен 2011, 13:40

Тем более что приложение "унаследованное", и ковырять его уже никто не будет, как я понял.
Дополнение: если есть необходимость, я правлю и базу и клиента.

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Re: Растет размер БД Firebird (совсем не линейно)

Сообщение Dimitry Sibiryakov » 07 сен 2011, 15:49

У тебя в базе висит чертовски длинная snapshot транзакция. Посмотри в таблицах мониторинга кому она принадлежит и убей (хозяина, не транзакцию).

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

Re: Растет размер БД Firebird (совсем не линейно)

Сообщение kdv » 07 сен 2011, 21:11

1. Влад уже сказал - действительно опять висит транзакция. при 50к транзакций в день отставание на 6к это примерно 1/10 рабочего времени, т.е. при 8 часовом приложении транзакция активна около часа. Это как бы намек, что в перспективе оно может превратиться и в трое суток, как в твоем первом примере.

2. ок

3. фиг с ней
есть смысл восстановить БД с размером 8 или 4?
такое впечатление, что все что я пишу - игнорируется :-)
по скорости оптимальный размер страницы это 8-16к. 4к это уже мало для нынешних баз, тем более для базы в 40 гиг.
Подавляюще бОльшая часть вашей БД составляет блобы. Поэтому нужно оценивать не размер данных (в какие-то несчастные 39-44 мб), а скорость работы с блобами. Подозреваю, что вы разницу между 8 и 16к на своей большой базе не увидите.
есть ли смысл включать синхронный режим (Forced Write) в моем случае?
перед выключением (вообще-то) Forced Writes нужно ознакомиться
- что такое Forced Writes вобще - http://www.ibase.ru/ibfaq.htm#fwoff.
- с соответствующими пунктами в firebird.conf
- выяснить, есть-ли батарейка на raid
- есть-ли UPS.

если ответы на пункты 2 и 3 - да, то можно включить FW. Вообще по умолчанию FW включен.

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

Re: Растет размер БД Firebird (совсем не линейно)

Сообщение dimitr » 08 сен 2011, 07:29

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

nbura
Сообщения: 11
Зарегистрирован: 05 сен 2011, 14:59

Re: Растет размер БД Firebird (совсем не линейно)

Сообщение nbura » 08 сен 2011, 10:35

Уважаемые собеседники, спасибо всем отвечавшим! С вашей помощью я упорядочил всю кашу в своей голове, надеюсь теперь в ней глупых истерик не возникнет :D . Наконец то научился нормально использовать IBA, до этого не было особой нужды.

По теме:
1. думаю при регулярной сборке мусора и периодическом ресторе базы транзакции меня волновать не будут.
2. насчет размера страниц и подозрения на необоснованно увеличение размера базы - это я тоже не подумал, так как: бекап то все равно был почти размером с БД, так что размер страниц, фрагментирование - это все не имеет отношение к моей проблеме.
3. при более внимательном иследовании БД обнаружил несколько таблиц-логов и таблиц, вышедших из работы еще 3 года назад. К тому же было включено логирование IBE$LOG****. Подукоротив все эти таблички, получил уменьшение ночного бекапа на 60%. В воскресенье сделаю ресторе - думаю и база будет в пределах 20 Гб.

Итог: размер БД - это моя невнимательность, ничего военного там не было. А вот тема мусора/версий и его ежедневного прироста - спасибо Вам, упорядочил, быстродействие ощутимо возросло.

П.С. FW решил не трогать пока, бесперебойник есть, рейд есть, до этого база никогда не портилась при мне (хотя свет бывает рубят раз в пару месяцев).

П.П.С. Вопрос не по теме: если я перед ресторе переименновал БД , заресторил со старым названием, то все клиентские приложения по прежнему работали со старой БД, хотя она и переименованная была (ребут сервиса Firebird ситуацию не изменял, а вот перезагрузка сервера - ставила все на свое место). Это какая-то особенность работы Firebird под Линуксом (или может это FW OFF как раз так себя ведет)? Как я уже и говорил, в Линуксе я баран.

А так тему можно закрывать, еще раз - Всем говорю спасибо :)

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

Re: Растет размер БД Firebird (совсем не линейно)

Сообщение kdv » 08 сен 2011, 11:32

то все клиентские приложения по прежнему работали со старой БД
это особенность линукса. можно хоть удалить файл, но если он открыт каким-то процессом ФБ, то этот процесс будет и дальше работать с этим файлом.

Ответить