Иллюстрированный самоучитель по PostgreSQL

Сопровождение базы данных

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

Основным средством физического и аналитического сопровождения баз данных в PostgreSQL является команда SQL VACUUM и ее аналог – сценарий vacuumdb. Оба средства выполняют две общие функции:

  • удаление всех данных, оставшихся в результате отмены транзакций и других операций, оставляющих временные данные;
  • анализ операций с базами данных, по результатам которого PostgreSQL конструирует более эффективные запросы.

Для баз данных, работающих в условиях реальной эксплуатации, команду VACUUM рекомендуется выполнять каждую ночь. Хотя команда может выполняться параллельно с обращениями к данным, это замедляет работу сервера. По этой причине сопровождение рекомендуется запланировать на время с минимальным количеством операций с базой данных.

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

Внимание
Команда VACUUM блокирует таблицы в монопольном режиме. Это означает, что все запросы, использующие обрабатываемую таблицу, приостанавливаются и ожидают снятия блокировки
.

Команда VACUUM

Команда SQL VACUUM имеет следующий синтаксис:

VACUUM [ VERBOSE ] [ ANALYZE ] [ таблица ]
VACUUM [ VERBOSE ] ANALYZE [ таблица [ (поле [….]) ] ]

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

Необязательный идентификатор таблица задается в том случае, если команда VACUUM должна очистить только одну таблицу в подключенной базе данных. Команда также обновляет в системных каталогах статистику по количеству записей и объемам данных. В листинге 9.14 приведен пример использования команды VACUUM для таблицы books в базе данных booktown.

Листинг 9.14. Применение команды VACUUM к отдельной таблице.

booktown=# VACUUM books;
VACUUM

Сообщение VACUUM означает, что процесс завершился успешно. Если заданную таблицу не удается найти, выводится следующее сообщение об ошибке:

NOTICE: Vacuum: table not found

При наличии необязательного ключевого слова ANALYZE PostgreSQL анализирует структуру данных во всех полях всех таблиц (или только заданной таблицы, если она указана), после чего эта информация используется оптимизатором запросов для более эффективного планирования. Ключевое слово ANALYZE также позволяет ограничить анализ отдельными полями. В листинге 9.15 приведен пример использования команды VACUUM ANALYZE для всей базы данных booktown.

Листинг 9.15. Применение команды VACUUM ANALYZE ко всей базе данных.

booktown=# VACUUM ANALYZE;
VACUUM

Наконец, необязательное ключевое слово VERBOSE применяется в том случае, если вы хотите получить подробный внутренний отчет по результатам выполнения команды VACUUM. Скорее всего, эта информация представляет интерес только для программистов, занимающихся разработкой PostgreSQL или взаимосвязанных программ.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.