"Гигиена" базы данных
"Гигиена" базы данных
Firebird использует многоверсионную архитектуру. Это означает, что на страницах данных хранится множество версий строк данных. Когда строка изменяется или удаляется, Firebird сохраняет копию старого состояния записи и создает новую версию. Это размножение предыдущих версий записей может увеличить размер базы данных.
Фоновая сборка мусора
Для ограничения такого разрастания Firebird постоянно выполняет сборку мусора (garbage collection) на фоне активности базы данных.
Фоновая сборка мусора ничего не делает с устаревшими версиями записей, которые относятся к незавершенным транзакциям - они не будут обработаны в процессе обычных служебных действий. Для полной санации базы данных Firebird может выполнять чистку базы данных (database sweeping).
Чистка базы данных
Чистка базы данных является способом систематического удаления всех устаревших версий строк и освобождения занятого ими пространства на страницах с целью его повторного использования. Периодическая чистка предотвращает разрастание базы данных до излишних размеров. Не удивительно, что, хотя чистка осуществляется в асинхронном фоновом потоке, она может повлиять на производительность системы.
По умолчанию база данных Firebird выполняет чистку, когда интервал очистки достигает 20 000 транзакций. При этом поведение чистки может настраиваться: она может запускаться автоматически, интервал очистки может изменяться, автоматическая чистка может быть отменена, чтобы запускать ее вручную при необходимости.
Ручная чистка может быть инициирована из служебной программы командной строки gfix. Подробности см. в главе 39. Некоторые другие инструменты обеспечивают графический интерфейс для инициирования ручной чистки.
Интервал очистки
Сервер Firebird поддерживает инвентаризацию транзакций. Самая старая из транзакций, которые помечены в инвентарном списке как завершенные по rollback, называется "старейшей заинтересованной" (Oldest Interesting Transaction, OIT, или Oldest transaction), и обозначает начальную точку для интервала очистки. Если интервал очистки больше нуля, Firebird запускает полную чистку базы данных, когда разница между OIT и транзакцией Oldest snaphsot превышает порог, установленный для интервала очистки.
Инструкции см. в главе 39.