PostgreSQL оператор VACUUM

В этом учебном пособии вы узнаете, как использовать PostgreSQL команду VACUUM с синтаксисом и примерами.

Описание

Оператор VACUUM используется для восстановления хранилища путем удаления устаревших данных или кортежей из базы данных PostgreSQL.

Синтаксис

Синтаксис для оператора VACUUM в PostgreSQL:

VACUUM [FULL] [FREEZE] [VERBOSE] [table_name ];

ИЛИ

VACUUM [FULL] [FREEZE] [VERBOSE]
ANALYZE table_name [ (col1, col2,... col_n) ];

Параметры или аргументы

FULL
Необязательный. Если указано, база данных записывает все содержимое таблицы в новый файл. Это освобождает все неиспользуемое пространство и требует исключительной блокировки для каждой таблице, которая очищается.
FREEZE
Необязательный. Если указано, кортежи агрессивно замораживаются при очистке таблицы. Это поведение по умолчанию, если указано FULL, поэтому избыточно указывать как FULL, так и FREEZE.
VERBOSE
Необязательный. Если указано, будет напечатан отчет об активности, детализирующий VACUUM активность для каждой таблицы.
ANALYZE
Необязательный. Если указано, статистика, используемая планировщиком, будет обновлена. Эти статистические данные используются для определения наиболее эффективного плана выполнения определенного запроса.
table_name
Необязательный. Если указано, очищаться будет только указанная таблица. Если не указано, все таблицы в базе данных будут очищены.
col1, col2,... col_n
Необязательный. Если указано, это столбцы, которые будут проанализированы.

Примечание

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

Пример

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

Восстановить пространство для повторного использования в той же таблице

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

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

Восстановить пространство и свернуть файл базы данных

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

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

Восстановить пространство для таблицы

Далее давайте посмотрим, как очистить конкретную таблицу, а не всю базу данных.
Например:

Этот пример будет очищать только таблицу products. Это освободит пространство в таблице products и оставит пространство доступным для использования только таблицей products. Размер файла базы данных не будет уменьшен.
Если вы хотите выделить неиспользуемое пространство обратно операционной системе, вам нужно добавить опцию FULL в оператор VACUUM следующим образом:

Это не только освободит неиспользуемое пространство в таблице products, но и позволит операционной системе освободить пространство и уменьшить размер базы данных.

Отчет об активности VACUUM

Наконец, вы можете добавить опцию VERBOSE в команду VACUUM для отображения отчета об активности процесса VACUUM.
Например:

Это выполнит полную очистку таблицы products. Давайте покажем вам, что вы можете увидеть в качестве выходных данных для отчета об активности VACUUM:

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