Быстрый старт
Развертывание
Моделирование данных
Подключение
Запись данных
Миграция
Запросы
Операции и обслуживание
Типовое обслуживание
Секционирование
Резервное копирование и восстановление
Масштабирование
Зеркалирование
Управление ресурсами
Безопасность
Мониторинг
Настройка производительности
Устранение неполадок
Справочник
Руководство по инструментам
Типы данных
Хранилище данных
Выполняющая система
Потоковая передача
Восстановление после сбоев
Конфигурация
Индексы
Расширения
Справочник по SQL
Часто задаваемые вопросы
Сборка мусора и, при необходимости, анализ базы данных.
VACUUM [({ FULL | FREEZE | VERBOSE | ANALYZE } [, ...])] [table [(column [, ...] )]]
VACUUM [FULL] [FREEZE] [VERBOSE] [table]
VACUUM [FULL] [FREEZE] [VERBOSE] ANALYZE
[table [(column [, ...] )]]
VACUUM освобождает хранилище, занятое удалёнными кортежами. В обычной работе базы данных YMatrix обновлённые, удалённые или отброшенные кортежи физически не удаляются из таблицы; они остаются на диске до завершения операции VACUUM. Поэтому необходимо регулярно выполнять VACUUM, особенно для часто обновляемых таблиц.
Если параметры не указаны, VACUUM обрабатывает каждую таблицу в текущей базе данных. При указании параметров VACUUM обрабатывает только указанную таблицу.
VACUUM ANALYZE выполняет VACUUM для каждой выбранной таблицы, а затем — ANALYZE. Это удобное сочетание команд для ежедневного обслуживания. Подробнее о процессе см. в описании команды ANALYZE.
VACUUM (без параметра FULL) помечает удалённые и устаревшие данные в таблицах и индексах для последующего повторного использования. Пространство может быть перераспределено только в том случае, если оно находится в конце таблицы и можно легко получить эксклюзивную блокировку таблицы. Неиспользуемое пространство в начале или середине таблицы остаётся без изменений. Для кучевых таблиц эта форма команды может выполняться параллельно с обычными операциями чтения и записи, поскольку эксклюзивная блокировка не устанавливается. Однако в большинстве случаев освобождённое пространство не возвращается операционной системе — его можно использовать только внутри той же таблицы. VACUUM FULL полностью перезаписывает содержимое таблицы в новый файл на диске без лишнего пространства, позволяя вернуть неиспользуемое место операционной системе. Эта форма работает значительно медленнее и требует эксклюзивной блокировки каждой таблицы во время обработки.
Для таблиц с оптимизацией добавления данных VACUUM сначала очищает индекс, затем поочерёдно сжимает каждый файл сегмента, после чего очищает вспомогательную таблицу и обновляет статистику для сжатия самой таблицы. На каждом сегменте видимые строки копируются из текущего файла сегмента в новый файл сегмента, после чего текущий файл планируется к удалению, а новый становится доступным. Обычный VACUUM для оптимизированных под добавление таблиц позволяет сканировать, вставлять, удалять и обновлять таблицу во время сжатия файлов сегментов. Однако текущий файл сегмента временно удаляется, а новый активируется с использованием блокировки Access Exclusive.
VACUUM FULL выполняет более глубокую обработку, включая перемещение кортежей между блоками, чтобы попытаться сжать таблицу до минимального количества блоков на диске. Этот вариант намного медленнее и требует применения блокировки Access Exclusive при обработке каждой таблицы. Блокировка Access Exclusive гарантирует, что владелец является единственной транзакцией, обращающейся к таблице любым способом.
FULL
FREEZE
vacuum_freeze_min_age в ноль перед выполнением VACUUM.VERBOSE
ANALYZE
table
column
VACUUM нельзя выполнять внутри блока транзакций.
Рекомендуется регулярно (минимум раз в сутки) выполнять VACUUM для активных баз данных, чтобы удалять устаревшие строки. После добавления или удаления большого количества строк может быть полезно выполнить команду VACUUM ANALYZE для затронутой таблицы. Это позволит обновить системный каталог с учётом всех недавних изменений и поможет оптимизатору запросов YMatrix выбрать наилучший план выполнения запросов.
Примечание: PostgreSQL имеет отдельный необязательный серверный процесс — демон autovacuum, предназначенный для автоматического выполнения команд VACUUM и ANALYZE. В базе данных YMatrix демон autovacuum включён и выполняет операции VACUUM только для шаблонной базы данных template0. Autovacuum включён для template0, потому что подключение к этой базе данных запрещено. Демон autovacuum выполняет VACUUM для template0 с целью управления идентификаторами транзакций (XID) и помогает избежать проблем, связанных с исчерпанием XID в template0.
Операции VACUUM в пользовательских базах данных должны выполняться вручную для управления идентификаторами транзакций (XID) в этих базах данных.
VACUUM вызывает значительное увеличение нагрузки на ввод-вывод, что может привести к снижению производительности других активных сессий. Поэтому рекомендуется выполнять VACUUM в периоды низкой нагрузки.
Команда VACUUM пропускает внешние таблицы.
VACUUM FULL освобождает всё пространство, занятое устаревшими строками, но требует эксклюзивной блокировки каждой обрабатываемой таблицы. Это очень ресурсоёмкая операция, которая может занимать много времени при обработке больших распределённых таблиц YMatrix. Рекомендуется выполнять VACUUM FULL в период технического обслуживания базы данных.
Использование опции FULL не рекомендуется для повседневного обслуживания, но может быть полезно в особых случаях. Например, когда вы удалили или обновили большую часть строк в таблице и хотите, чтобы таблица физически уменьшилась, занимая меньше места на диске и обеспечивая более быстрые сканирования. VACUUM FULL обычно сжимает таблицу сильнее, чем обычный VACUUM.
В качестве альтернативы VACUUM FULL можно использовать оператор CREATE TABLE AS, чтобы воссоздать таблицу и удалить старую.
Для таблиц с оптимизацией добавления данных VACUUM требует достаточного объёма свободного дискового пространства для размещения новых файлов сегментов в процессе выполнения. Если отношение скрытых строк к общему числу строк в файле сегмента меньше порогового значения (по умолчанию 10%), файл сегмента не сжимается. Пороговое значение можно настроить с помощью серверного параметра конфигурации gp_appendonly_compaction_threshold. VACUUM FULL игнорирует этот порог и перезаписывает файл сегмента независимо от соотношения. Сжатие для таблиц с оптимизацией добавления данных можно отключить с помощью серверного параметра конфигурации gp_appendonly_compaction.
Если при очистке таблиц с оптимизацией добавления данных обнаруживаются одновременные сериализуемые транзакции, текущий и последующие файлы сегментов не сжимаются. Если файл сегмента уже был сжат, но в транзакции, удалившей исходный файл сегмента, обнаружена одновременная сериализуемая транзакция, удаление игнорируется. После завершения очистки один или оба файла сегментов могут оказаться в состоянии «ожидания удаления».
Очистить одну таблицу onek, выполнить анализ оптимизации и вывести подробный отчёт о работе VACUUM:
VACUUM (VERBOSE, ANALYZE) onek;
Очистить все таблицы в текущей базе данных:
VACUUM;
Очистить только определённые таблицы:
VACUUM (VERBOSE, ANALYZE) mytable;
Очистить все таблицы в текущей базе данных и собрать статистику для оптимизатора запросов:
VACUUM ANALYZE;
Оператор VACUUM отсутствует в стандарте SQL.