Оптимизация приложений для работы с СУБД InterBase
Страница 23. Очистка базы данных (Sweeping)


Очистка базы данных (Sweeping)

Понятие sweep — очистка — означает, что сервер должен провести работу по сбору старых версий строк данных, появившихся за время работы с программой — клиентом базы данных. Функции сервера, ответственные за сборку мусора и очистку, будут удалять из базы данных более ненужные устаревшие версии записей. Версия записи считается устаревшей в случае, если нет в принципе возможности существования транзакции, которой данная версия может потребоваться. Так что, если вы начали транзакцию в режиме snapshot, к примеру, то сервер будет не в состоянии очистить ни одну из старых версий и ни одну из записей с момента начала транзакции до тех пор, пока транзакция не завершится. Ведь сервер не имеет ни малейшего понятия, какие таблицы и какие записи могут понадобиться транзакции. Это, конечно, подразумевает использование дополнительного дискового пространства, но в большинстве случаев больших проблем в производительности это не вызывает.

Еще одной причиной, по которой может проявиться понижение производительности в старых версиях InterBase, является собственно процесс очистки — sweep process. В СУБД InterBase 7 многопоточная модель работы ядра сервера баз данных была значительно улучшена, и на текущий момент процесс очистки не вызывает замедления или блокирования выполнения запросов. В старых версиях InterBase скорость выполнения пользовательских запросов может быть заметно ниже обычной, если база данных в этот момент времени очищается. Но несмотря на все трудности, существует несколько обходных путей, позволяющих решить эту проблему полностью или частично.

Самый простой — перейдите на СУБД InterBase версии 7.1. Запретите автоматическую очистку базы данных и запускайте ее очистку в ручном режиме во время наименьшей загруженности сервера. Уменьшите объем работы, который необходимо будет выполнить процессу, и увеличьте период между повторными запусками очистки. Этого можно достигнуть путем использования транзакций в режиме read committed вместо snapshot, а также путем минимизации откатов изменений везде, где это возможно.

 
« Предыдущая статья   Следующая статья »