Книга: Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
Интервал чистки
Разделы на этой странице:
Интервал чистки
Интервалом чистки (sweep interval) является установленное для базы данных целое число, которое определяет предел для некоторого набора условий, что приведет к выполнению автоматической чистки.
Сервер Firebird ведет список транзакций. Любая транзакция, находящаяся в любом состоянии, кроме подтвержденного, называется заинтересованной транзакцией. Самая старая из этих "заинтересованных" транзакций (старейшая заинтересованная транзакция, Oldest Interesting Transaction, OIT) отмечает начальную точку для условия, называемого "зазором".
Противоположным концом этого зазора является старейшая транзакция, которая все еще активна: самая старая активная транзакция (Oldest Active Transaction, OAT). Зазор, следовательно, является разностью между OIT и OAT[153]. Когда величина зазора достигает числа, указанного как интервал чистки, то автоматически запускается чистка во время запуска новой транзакции.
Базы данных создаются с интервалом чистки 20 000.
Существует маленькое, но важное различие: автоматическая чистка не появляется каждые 20 000 транзакций. Она появляется, когда разница между OIT и OAT - зазор - достигает заданного предела. Если приложения базы данных аккуратно подтверждают каждую транзакцию, OAT будет увеличиваться, пока не достигнет предела интервала чистки, и тогда будет запущена чистка.
Изменение интервала чистки
Изменение интервала чистки мало влияет на размер базы данных, если только база данных не накопила очень большого количества отмененных транзакций. Однако если вы замечаете увеличение времени запуска транзакции с момента последней чистки, то уменьшение интервала чистки может помочь сократить накопление объектов, вызванных откатом транзакций.
Если интервал чистки слишком мал, производительность приложения может иметь тенденцию к ухудшению, по причине слишком частого выполнения чистки. В этом случае увеличение интервала чистки может помочь улучшить общую производительность.
Переключателем режима для установки интервала чистки является -h[ousekeeping] n, где n представляет новое значение счетчика (интервала).
gfix -h 10000 /data/accounts.fdb -user SYSDBA-pas masterkey
устанавливает новое значение интервала чистки для accounts.fdb в 10 000.
Отмена автоматической чистки
Вы можете решить отменить автоматическую чистку, если вам нужно исключить случайные, непредсказуемые задержки, возникающие из-за автоматической чистки. Такая отмена не рекомендуется, если только управление старыми версиями записей эффективно не осуществляется альтернативными средствами, такими как отслеживание статистики и регулярное выполнение ручной чистки.
Автоматическая чистка может быть отменена установкой интервала чистки в 0:
./gfix -h 0 /data/accounts.fdb -user SYSDBA-pas masterkey или (Windows):
gfix -h 0 d:dataaccounts.fdb -user SYSDBA-pas masterkey
- Совет 5. Используйте интервальные функции вместо одноэлементных
- Функции munmap() и do_munmap(): удаление интервала адресов
- Инфобизнес «на пальцах», Или послесловие для прочистки мозгов, мотивации и небольшого послевкусия
- 14.3.3. Интервальные таймеры: setitimer() и getitimer()
- Функции mmap() и do_mmap(): создание интервала адресов
- Ожидание в течение конечного интервала времени
- 18.2.2. Интервальные таймеры
- Листинг 7.1. Пример кода для измерения временных интервалов, который вы можете использовать для хронометража работы свои...
- Листинг 7.2. Тестовая программа, демонстрирующая использование приведенного выше кода для измерения временных интервалов
- Листинг 7.1. Пример кода для измерения временных интервалов, который вы можете использовать для хронометрирования работы...
- Совет 37. Используйте accumulate или for_each для обобщения интервальных данных
- 4.3.1. Обработчики очистки