Как оптимизировать таблицу после удаления многих записей - PullRequest
2 голосов
/ 02 ноября 2009

Я удалил много записей из своей таблицы, но размер БД (Firebird) остался прежним. Как мне уменьшить его?

Я ищу что-то похожее на вакуум в PostgreS.

Ответы [ 3 ]

2 голосов
/ 02 ноября 2009

Это одна из многих болей Жар-птицы. Лучший и единственный эффективный и правильный способ сделать это - сделать резервную копию / восстановить базу данных, используя gbak

1 голос
/ 02 ноября 2009

Firebird будет иногда запускать очистку, чтобы удалить записи из индексов и т. Д., И освободить место для другого использования. Другими словами, как только будет запущена развертка, вы получите такую ​​же производительность, как если бы файл базы данных был меньше. Вы можете принудительно выполнить проверку, если это то, что вы пытаетесь сделать.

Однако размер фактической базы данных не будет уменьшаться, несмотря ни на что, кроме случаев, когда вы выполняете резервное копирование и восстановление. Если размер является проблемой, используйте параметр -USE_ALL_SPACE для gbak, это предотвратит резервирование места для будущих записей, что приведет к уменьшению базы данных.

0 голосов
/ 24 февраля 2013

Из официального FAQ

Многие пользователи задаются вопросом, почему они не возвращают свое дисковое пространство, когда они удалить много записей из базы данных.

Причина в том, что это дорогая операция, она потребует много записей на диске и памяти - так же, как делать рефрагментацию раздел жесткого диска. Части базы данных (страницы), которые использовались такие данные помечаются как пустые, и Firebird будет использовать их в следующий раз для этого нужно написать новые данные.

Если для вас критично место на диске, вы можете получить его обратно, делать резервные копии, а затем восстановить. Так как вы делаете резервную копию восстановить сразу, разумно использовать «запретить сборку мусора» или переключатель «не использовать сборку мусора» (-G в gbak), который сделает Резервное копирование идти много быстрее. Сборка мусора используется для очистки вашего базы данных, и, поскольку это задача обслуживания, это часто делается вместе с резервным копированием (так как резервное копирование должно проходить через всю базу данных в любом случае). Тем не менее, вы скоро собираетесь отказаться от этого файла базы данных, и нет нужно почистить.

...