В этом учебном пособии вы узнаете, как использовать PostgreSQL команду VACUUM с синтаксисом и примерами.
Описание
Оператор VACUUM используется для восстановления хранилища путем удаления устаревших данных или кортежей из базы данных PostgreSQL.
Синтаксис
Синтаксис для оператора VACUUM в PostgreSQL:
ИЛИ
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, поскольку пространство не освобождается операционной системой, а только таблицей, из которой было выделено пространство.
Например:
1 |
VACUUM; |
Этот пример будет очищать все таблицы в базе данных. Это освободит пространство внутри каждой таблицы и оставит пространство доступным для повторного использования этой же таблицей. Он не возвращает пространство операционной системе, поэтому размер файла базы данных не будет уменьшен.
Восстановить пространство и свернуть файл базы данных
Если вы хотите очистить все таблицы и свести к минимуму файл базы данных, возвращая неиспользуемое пространство операционной системе, вы должны выполнить следующий оператор VACUUM:
1 |
VACUUM FULL; |
В этом примере все таблицы будут переписаны в новый файл, что потребует эксклюзивной блокировки каждой таблицы. Файл базы данных будет сведен к минимуму, поскольку все неиспользуемое пространство будет возвращено обратно в операционную систему.
Восстановить пространство для таблицы
Далее давайте посмотрим, как очистить конкретную таблицу, а не всю базу данных.
Например:
1 |
VACUUM products; |
Этот пример будет очищать только таблицу products. Это освободит пространство в таблице products и оставит пространство доступным для использования только таблицей products. Размер файла базы данных не будет уменьшен.
Если вы хотите выделить неиспользуемое пространство обратно операционной системе, вам нужно добавить опцию FULL в оператор VACUUM следующим образом:
1 |
VACUUM FULL products; |
Это не только освободит неиспользуемое пространство в таблице products, но и позволит операционной системе освободить пространство и уменьшить размер базы данных.
Отчет об активности VACUUM
Наконец, вы можете добавить опцию VERBOSE в команду VACUUM для отображения отчета об активности процесса VACUUM.
Например:
1 |
VACUUM FULL VERBOSE products; |
Это выполнит полную очистку таблицы products. Давайте покажем вам, что вы можете увидеть в качестве выходных данных для отчета об активности VACUUM:
1 2 3 4 5 6 |
trizor=# VACUUM FULL VERBOSE products; INFO: vacuuming "public.products" INFO: "products": found 4 removable, 5 nonremovable row versions in 1 pages DETAIL: 0 dead row versions cannot be removed yet. CPU 0.00s/0.00u sec elapsed 0.04 sec. VACUUM |
В этом отчете о деятельности будут отображаться таблицы, которые были очищены VACUUM, а также подробная информация и время, необходимое для выполнения операции очистки.
Далее узнайте больше о функции AUTOVACUUM, начиная с PostgreSQL 8.1