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

45 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
aliases:
- bloat
tags:
- maturity/🌱
date: 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|00 PostgreSQL]]
**Родитель**::
**Источник**::
**Создана**:: [[2024-11-05]]
**Автор**::
### Дополнительные материалы
-
### Дочерние заметки
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->