Шрифт:
Зазор является важным для автоматической чистки, потому что установленный для базы данных интервал чистки (sweeping interval) управляет максимальной величиной зазора, при достижении которого стартует процесс чистки [94] . Автоматическая чистка выполняется редко или никогда не выполняется для некоторых баз данных, потому что зазор не достигает порогового значения.
По умолчанию каждая база данных создается с интервалом чистки (максимальной величиной зазора) в 20 000. При необходимости эта величина может быть увеличена или уменьшена, или же чистка совсем может быть отключена при установке величины интервала в 0.
94
Во всех версиях Firebird и в InterBase до версии 7.1 sweep срабатывает, когда расстояние между OIT и Oldest Snapshot Transaction (а не OAT) становится больше sweep interval (см. разд. "Другие переключатели gstat" главы 18). В Firebird 2.0 срабатывание sweep будет зависеть именно от разницы OAT-OIT.
– Прим. науч. ред.
В системе, где зазор всегда меньше интервала чистки, не является справедливым, что для базы данных никогда не требуется чистка. Все базы данных должны вычищаться - это вопрос управления базами данных человеком, будут ли они чиститься автоматически, вручную с использованием gfix или обоими способами. Думайте об автоматической чистке как о системе стабильного функционирования, а не как о заменителе удобного управления базой данных.
Статистика транзакций
В Firebird есть несколько полезных утилит для получения сведений о том, насколько хорошо ваша база данных управляет зазором между OIT и OAT. Их вы можете также использовать для просмотра значений в заголовочной странице базы данных.
gstat
Инструмент командной строки gstat, используемый с переключателем -header, показывает различную статистическую информацию базы данных, включая текущее значение идентификатора транзакции для OIT, OAT и для следующей новой транзакции. Для использования gstat соединитесь с базой данных как пользователь SYSDBA из командной строки на главной машине и перейдите в каталог bin Firebird. Наберите следующий текст в Windows:
gstat -h <путь-к-базе-данных> -user sysdba -password masterkey
Наберите в POSIX:
./gstat -h <путь-к-базе-данных> -user sysdba -password masterkey
Вот фрагмент выходных данных:
Oldest transaction 10075
Oldest active 100152
Oldest snapshot 100152
Next transaction 100153
Терминология в этом отчете может вызвать удивление. При просмотре выхода gstat имейте в виду, что:
* Oldest transaction - это OIT;
* Oldest active - очевидно, OAT;
* oldest snapshot- обычно то же, что и OAT- строка будет выведена, когда OAT продвигается далее. Это фактический идентификатор транзакции, рассматриваемый сборщиком мусора как сигнал существования мусора, который может быть обработан [95] .
95
OST - это на самом деле номер транзакции, которая была активной на момент старта OAT.
– Прим. науч. ред.
isql
Вы можете получить похожий вид статистики из заголовка базы данных в сессии isql при использовании команды SHOW DATABASE.
Многие инструменты администратора Firebird сторонних разработчиков создают эквивалентные отчеты.
Что может рассказать вам статистика
Сборка мусора всегда будет выполняться над устаревшими версиями записей, не трогая заинтересованные транзакции. При этом OLDEST SNAPSHOT отмечает границы, на которых сборщик мусора останавливает просмотр подтвержденных транзакций. Любой мусор с такого номера транзакции и выше не будет обрабатываться.
Если зазор между OAT и NEXT TRANSACTION определяет гораздо большее количество транзакций, чем подсчитываемое количество подключенных пользователей и их задач, вы можете быть уверенными, что большое количество мусора не будет обрабатываться сборщиком мусора. Если этот зазор будет увеличиваться, работа с базой данных будет все больше и больше замедляться. Серверы будут выдавать ошибку "Out of memory" (недостаточно памяти) или просто будут аварийно завершаться, потому что TSB расходует большой объем памяти или приводит к тому, что сервисы управления системной памятью используют слишком сильную фрагментации памяти. Дешевые серверы - особенно те, которые нагружены предоставлением дополнительных сервисов- даже могут не получить достаточно ресурсов для записи сообщения в протокол.
Если вам кажется, что зазоры между OIT и OAT или между OAT и NEXT TRANSACTION приводят к проблемам в вашей системе, вы можете многое узнать о воздействиях чистки базы данных и улучшения ваших приложений, если сохраните протоколы статистики.
! ! !
СОВЕТ. Для получения текстовых файлов простой статистики просто перенаправьте выход утилиты gstat -h в текстовый файл в соответствии с правилами вашей командной строки. В утилите isql используйте команду output <имя файла> для перенаправления результатов выполнения команды SHOW DATABASE.
. ! .
Драйверы, которые скрывают от разработчика приложений явное управление транзакциями и нивелируют разницу между различными реализациями поставщиков SQL, редко способствуют высокой производительности пользовательских приложений, а также хорошему здоровью и гигиене базы данных. В следующей главе рассматриваются различные комбинации параметров, доступные для конфигурирования транзакций, а также стратегии, которые вы можете использовать для подгонки транзакций к каждой задаче.