vacuumdb
Эта страница переведена при помощи нейросети GigaChat.
vacuumdb — выполняет очистку и анализ базы данных PostgreSQL.
Синтаксис
vacuumdb [connection-option...] [option...] [-t | --table table [( column [,...] )] ] ... [dbname]
vacuumdb [connection-option...] [option...] -a | --all
Описание
vacuumdb — утилита для очистки базы данных PostgreSQL. vacuumdb также генерирует внутреннюю статистику, которую использует оптимизатор запросов PostgreSQL.
vacuumdb является оболочкой для команды SQL VACUUM. По своей эффективности она не отличается от очистки базы данных другими способами, доступными в сервере PostgreSQL.
Параметры
Для утилиты vacuumdb существуют следующие параметры командной строки:
-a--all
Очищает все базы данных.
-d dbname--dbname=dbname
Задает имя базы данных для очистки, когда -a/--all не используется. Если параметр не указан, используется переменная окружения PGDATABASE. Если она не установлена, применяется имя пользователя, указанное для подключения. dbname может быть строкой подключения. В этом случае параметры строки подключения имеют приоритет над одноименными параметрами командной строки.
--disable-page-skipping
Отключает пропуск страниц в зависимости от содержимого карты видимости.
Параметр доступен только для серверов PostgreSQL версии 9.6 и выше.
-e--echo
Выводит на экран команды, которые vacuumdb отправляет на сервер.
-f--full
Выполняет «полную» очистку.
-F--freeze
Агрессивно «замораживает» версии строк.
--force-index-cleanup
Принудительно удаляет из индексов ссылки на мертвые кортежи.
Параметр доступен только для серверов PostgreSQL версии 12 и выше.
-j njobs--jobs=njobs
Выполняет команды VACUUM или ANALYZE в несколько потоков, запуская до njobs параллельных процессов. Это ускоряет обработку, но может повысить нагрузку на сервер.
Убедитесь, что параметр max_connections имеет достаточно высокое значение, чтобы вместить все соединения.
Использование этого параметра совместно с -f (FULL) может привести к проблемам блокировок при одновременной обработке системных каталогов.
--min-mxid-age mxid_age
Выполняет команды VACUUM или ANALYZE только для тех таблиц, у которых возраст multixact идентификатора превышает указанный порог mxid_age. Используется для выбора таблиц, первоочередная обработка которых поможет предотвратить зацикливание идентификаторов мультитранзакций (подробнее об этом в разделе «Предотвращение сбоев при оборачивании идентификаторов транзакций»)
Возраст определяется как максимум между возрастами основного отношения и его TOAST таблицы (если она существует). TOAST-таблица обрабатывается автоматически, ее указывать отдельно не требуется.
Параметр доступен только для серверов PostgreSQL версии 9.6 и выше.
--min-xid-age xid_age
Выполняет команды VACUUM или ANALYZE только для таблиц с возрастом идентификатора транзакции не менее xid_age. Позволяет задать приоритет для предотвращения переполнения идентификаторов транзакций.
Учитывается возраст как основного отношения, так и связанной TOAST-таблицы (если есть). Обе таблицы обрабатываются совместно.
Параметр доступен только для серверов PostgreSQL версии 9.6 и выше.
--no-index-cleanup
Запрещает удаление из индексов ссылок на мертвые кортежи.
Параметр доступен только для серверов PostgreSQL версии 12 и выше.
--no-process-toast
Исключает из обработки TOAST-таблицы, связанные с обрабатываемыми таблицами.
Параметр доступен только для серверов PostgreSQL версии 14 и выше.
--no-truncate
Запрещает отсечение пустых страниц в конце таблиц.
Параметр доступен только для серверов PostgreSQL версии 12 и выше.
-P parallel_workers--parallel=parallel_workers
Указывает количество параллельных рабочих процессов для параллельной очистки. Это позволяет в ходе очистки задействовать мощности нескольких процессоров для обработки индексов. Подробнее об этом в описании команды VACUUM.
Параметр доступен только для серверов PostgreSQL версии 13 и выше.
-q--quiet
Отключает вывод сообщений о ходе выполнения.
--skip-locked
Пропускает таблицы, которые не удается немедленно заблокировать для обслуживания.
Параметр доступен только для серверов PostgreSQL версии 12 и выше.
-t table [ (column [,...]) ]--table=table [ (column [,...]) ]
Выполняет очистку или анализ только указанной таблицы table. Указание столбцов допускается только при использовании с --analyze или --analyze-only. Параметр можно указать несколько раз для очистки нескольких таблиц.
При указании столбцов, возможно, потребуется экранировать скобки для корректной обработки оболочкой. Примеры представлены ниже.
-v--verbose
Выводит подробную информацию во время процесса.
-V--version
Выводит версию vacuumdb и завершается.
-z--analyze
Выполняет расчет статистики, необходимой оптимизатору запросов после очистки.
-Z--analyze-only
Выполняет только анализ таблиц без их очистки.
--analyze-in-stages
Проводит анализ в несколько этапов (аналогично --analyze-only). Сначала создается минимальная статистика для быстрой начальной оценки (подробнее об этом описано в default_statistics_target), затем выполняются дополнительные проходы для генерации полной статистики.
Полезно при работе с недавно загруженными данными, например после восстановления выгрузки или pg_upgrade. При наличии актуальной статистики в базе запуск этой опции может временно снизить качество выбора планов выполнения.
-?--help
Показывает справку о параметрах командной строки утилиты vacuumdb и завершается.
-h host--host=host
Указывает хост компьютера, на котором запущен сервер. Если значение начинается с косой черты, оно определяет каталог Unix-сокета.
-p port--port=port
Указывает TCP-порт или расширение файла локального Unix-сокета для подключения к серверу.
-U username--username=username
Указывает имя пользователя для подключения.
-w--no-password
Отключает запрос на ввод пароля. Если сервер требует аутентификации по паролю и пароль недоступен другими способами, такими как файл .pgpass, попытка подключения завершится неудачей. Параметр полезен в пакетных заданиях и сценариях, где нет пользователя, который мог бы ввести пароль.
-W--password
Запрашивает пароль перед подключением к основному серверу.
Параметр не является обязательным, поскольку vacuumdb автоматически запросит пароль, если сервер требует аутентификацию паролем. Однако утилита потратит попытку подключения, чтобы выяснить, что сервер хочет пароль. В некоторых случаях стоит ввести -W, чтобы избежать дополнительной попытки подключения.
--maintenance-db=dbname
Указывает имя базы данных, к которой будет выполняться подключение для определения подлежащих очистке баз данных, когда используется ключ -a/--all. Если параметр не задан, используется база postgres. Если она отсутствует или совпадает с удаляемой, применяется template1.
Также можно передать строку подключения. В этом случае параметры строки подключения имеют приоритет над одноименными параметрами командной строки. Кроме того, параметры строки подключения, отличные от самого имени базы данных, будут повторно использованы при подключении к другим базам данных.
Доработки Pangolin
Поддержка парольной фразы PKCS#12
В утилиту vacuumdb добавлен параметр --passphrase-pkcs12.
Параметр задает парольную фразу для доступа к контейнеру PKCS#12 и позволяет избежать повторных запросов парольной фразы при многократных подключениях в рамках одного запуска утилиты, в том числе при использовании параметра --jobs.
Параметр применяется при подключении к СУБД с использованием сертификата PKCS#12. Данная функциональность используется, в том числе, при выполнении обновления СУБД с помощью pg_upgrade.
Переменные окружения
Утилита поддерживает переменные окружения:
PGDATABASEPGHOSTPGPORTPGUSERPG_COLOR
PG_COLOR указывает, использовать ли цвет в диагностических сообщениях. Возможные значения — always, auto и never.
Утилита vacuumdb использует переменные окружения, поддерживаемые libpq.
Диагностика
В случае возникновения трудностей, обратитесь в разделы VACUUM и psql.
Сервер базы данных должен быть запущен на целевом хосте. Кроме того, будут применяться стандартные настройки подключения и переменные окружения, применяемые библиотекой интерфейса libpq.
Примечания
vacuumdb может потребоваться установление соединения с сервером PostgreSQL несколько раз. Если используется парольная аутентификация, система запросит пароль для каждого подключения. Чтобы избежать этого, воспользуйтесь файлом ~/.pgpass.
Примеры
Очистка базы данных test:
$ vacuumdb test
Очистка и анализ для оптимизатора базы данных bigdb:
$ vacuumdb --analyze bigdb
Очистка одной таблицы foo в базе данных xyzzy и анализ только столбца bar таблицы для оптимизатора:
$ vacuumdb --analyze --verbose --table='foo(bar)' xyzzy