45 lines
4.4 KiB
Markdown
45 lines
4.4 KiB
Markdown
|
---
|
|||
|
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) -->
|
|||
|
|