Быстрый старт
Развертывание
Моделирование данных
Подключение
Запись данных
Миграция
Запросы
Операции и обслуживание
Типовое обслуживание
Секционирование
Резервное копирование и восстановление
Масштабирование
Мониторинг
Настройка производительности
Устранение неполадок
Справочник
Руководство по инструментам
Типы данных
Хранилище данных
Выполняющая система
Потоковая передача
Восстановление после сбоев
Конфигурация
Индексы
Расширения
Справочник по SQL
Часто задаваемые вопросы
В этом документе объясняется, как правильно и эффективно выполнять периодическую очистку и обслуживание таблиц в базах данных YMatrix, а также приводятся соответствующие принципы.
YMatrix настоятельно рекомендует выполнять регулярную очистку и обслуживание таблиц на продуктивных системах.
Периодическая очистка осуществляется с помощью команды VACUUM, главным образом для освобождения дискового пространства, занимаемого мёртвыми кортежами. При нормальной работе YMatrix строки, которые были обновлены или удалены, не удаляются физически из таблицы немедленно. Эти устаревшие строки остаются до тех пор, пока не завершится операция VACUUM. Поэтому крайне важно регулярно запускать VACUUM, особенно для таблиц, подвергающихся частым обновлениям.
В большинстве случаев достаточно полагаться на демон autovacuum для выполнения очистки. Для оптимальной производительности может потребоваться настройка параметров autovacuum, описанных ниже. Однако в некоторых сценариях может потребоваться ручное выполнение команд, таких как VACUUM, для дополнения или замены фоновых процессов. Обычно это делается с помощью cron-скриптов или скриптов планировщика задач.
Регулярная очистка и обслуживание всех таблиц в базе данных YMatrix необходимы по следующим причинам:
UPDATE или DELETE не удаляет старую версию строки немедленно. Это поведение требуется для многоверсионного управления параллелизмом (MVCC): старые версии должны сохраняться до тех пор, пока они могут быть видны другим транзакциям. В конечном счёте, однако, ни одна транзакция не будет требовать устаревшую или удалённую версию строки. Пространство, которое она занимает, должно быть освобождено для повторного использования новыми строками, чтобы предотвратить неограниченный рост использования дискового пространства.Ручная очистка выполняется путём запуска SQL-команды VACUUM.
Например, для очистки конкретной таблицы:
=# VACUUM <tablename>;
Для очистки всех таблиц:
=# VACUUM;
В дополнение к стандартной команде VACUUM можно использовать VACUUM FULL. Хотя VACUUM FULL освобождает больше дискового пространства, она работает значительно медленнее. Стандартная VACUUM может выполняться параллельно с обычными операциями базы данных — команды, такие как INSERT, UPDATE, DELETE и SELECT, продолжают работать нормально. Однако во время стандартной VACUUM нельзя использовать команды вроде ALTER TABLE для изменения определения таблицы. В отличие от этого, VACUUM FULL требует эксклюзивной блокировки целевой таблицы, что запрещает любой параллельный доступ. Поэтому администраторам следует, как правило, предпочитать стандартную VACUUM и избегать использования VACUUM FULL.
Степень блокировки других SQL-запросов во время VACUUM зависит от движка хранения:
| Движок хранения | INSERT | UPDATE | DELETE | ALTER | SELECT | Физический размер файла |
|---|---|---|---|---|---|---|
| HEAP | Не блокируется | Не блокируется | Не блокируется | Блокируется | Не блокируется | Не изменяется |
| AO | Не блокируется | Не блокируется | Не блокируется | Блокируется | Не блокируется | Уменьшается |
| MARS2/MARS3 | Не блокируется | Не блокируется | Не блокируется | Блокируется | Не блокируется | Уменьшается |
Примечание!
VACUUMсоздаёт значительную нагрузку на ввод-вывод, что может снизить производительность других активных сессий. Вы можете уменьшить это влияние, настроив параметры задержки очистки на основе стоимости. Подробности см. в разделе Очистка с учётом стоимости.
Автоматическая очистка выполняется демоном Autovacuum, задача которого — автоматически запускать команды VACUUM и ANALYZE. При включении:
autovacuum_naptime.autovacuum_max_workers, значение по умолчанию — 3.VACUUM, когда:autovacuum_vacuum_threshold + autovacuum_vacuum_scale_factor * number_of_rows.ANALYZE, когда:autovacuum_analyze_threshold + autovacuum_analyze_scale_factor * number_of_rows.Включите autovacuum и перезагрузите конфигурацию для применения изменений:
$ gpconfig -c autovacuum -v on
$ mxstop -u
Примечание!
Autovacuum требует включённого параметраtrack_counts(track_counts = on). Этот параметр включён по умолчанию.
Примечание!
Полный список параметров конфигурации, связанных с autovacuum, см. в разделе Параметры autovacuum.