digital-garden/dev/database/postgresql/Раздутие таблиц.md
Struchkov Mark 516c330dc2
Some checks reported errors
continuous-integration/drone/push Build was killed
continuous-integration/drone Build is failing
Обновление
2024-11-08 23:37:40 +03:00

4.4 KiB
Raw Blame History

aliases tags date
bloat
maturity/🌱
2024-11-05

Тезисы

  • “Раздутие” (bloat) — это проблема неиспользуемого, но занятого пространства в таблицах базы данных.
  • Основные причины: удаление и обновление строк, которые оставляют физическое пространство занятым.
  • Проблема приводит к увеличению объема базы, снижению производительности и повышению требований к ресурсам.
  • Для борьбы с bloat применяют Autovacuum, ручной Vacuum и вакуумирование с полной переорганизацией (VACUUM FULL).

“Раздутие” (bloat) таблиц — это накопление неиспользуемого, но занятого пространства в структуре таблиц базы данных. Такая ситуация возникает, когда строки удаляются или обновляются.

!Таблица в PostgreSQL#^71df9c

Основные причины раздутия:

  1. Удаление строк: При удалении строки данные физически остаются в таблице, занимая место.
  2. Обновление строк: PostgreSQL создает новую версию строки для обновленных данных, сохраняя старую версию для обеспечения транзакционной целостности, что также добавляет лишние данные.

Последствия раздутия:

  • Рост объема данных: Таблицы и индексы могут существенно увеличиваться в объеме, требуя больше места на диске.
  • Снижение производительности: Чем больше размер таблицы, тем медленнее будут выполняться запросы. Это связано с тем, что сервер вынужден обрабатывать неактуальные данные.
  • Увеличение использования ресурсов: Дополнительные данные влияют на объем памяти и нагрузку на процессор, что может замедлить систему.

Методы борьбы с bloat:

  1. Autovacuum: В PostgreSQL есть автоматический процесс Autovacuum, который регулярно удаляет неактуальные строки, чтобы уменьшить bloat. Однако его настройка требует внимания, так как высокая частота работы Autovacuum может создавать нагрузку на производительность, а слишком редкая настройка может не справляться с накоплением пустот.
  2. Ручной VACUUM: В случае значительного bloat можно запускать команду VACUUM вручную, чтобы освободить неиспользуемое пространство. Такой подход полезен для интенсивных таблиц, где Autovacuum не всегда справляется.
  3. VACUUM FULL: Для полного устранения bloat иногда требуется вакуумирование с полной переорганизацией, то есть VACUUM FULL. Эта операция пересоздает таблицу, удаляя все неиспользуемое пространство, но требует блокировки таблицы на время выполнения, что может прерывать работу пользователей.

Мета информация

Область:: ../../../meta/zero/00 PostgreSQL Родитель:: Источник:: Создана:: 2024-11-05 Автор::

Дополнительные материалы

Дочерние заметки