Index bloat — лишний объём индекса из-за устаревших записей и неплотно заполненных страниц. MVCC сохраняет старые версии, а интенсивные изменения и задержки очистки усиливают разрастание.
Что такое «разрастание индексов» (index bloat) в PostgreSQL, почему оно возникает из-за механики MVCC и как с ним бороться?
Index bloat — лишний объём индекса из-за устаревших записей и неплотно заполненных страниц. MVCC сохраняет старые версии, а интенсивные изменения и задержки очистки усиливают разрастание.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Index bloat — лишний объём индекса из-за устаревших записей и неплотно заполненных страниц. MVCC сохраняет старые версии, а интенсивные изменения и задержки очистки усиливают разрастание.
Не каждый UPDATE создаёт новые записи во всех индексах: HOT может избежать этого при подходящих условиях. Но долгие транзакции и недостаточная очистка мешают освобождению старых версий, а обычное освобождение места не всегда уменьшает файл индекса.
Проверьте объём, использование, workload и состояние autovacuum, устраните долгие удержания snapshot. При подтверждённом bloat применяют плановое перестроение, например поддерживаемый REINDEX CONCURRENTLY, с запасом места и контролем нагрузки. Не перестраивайте все индексы вслепую только из-за большого абсолютного размера.
Источник: www.postgresql.org.