Сводка
Я использую Postgres UPSERT в наших ETL, и у меня возникают проблемы с фрагментацией и раздутием в таблицах, в которые я пишу, что замедляет все операции включая чтение.
Контекст
У меня есть ежечасные ETL-файлы, загружаемые в таблицы (таблицы ~ 10 с миллионов, upserts ~ 10 с тысяч), и мы установили автоматический вакуум на пороги на AWS.
Мне пришлось запустить ПОЛНЫЙ вакуум, чтобы вернуть пространство назад и предотвратить зависание процессов. Сейчас это усугубляется, поскольку частота одного из наших ETL увеличилась, что заполняет некоторые базовые таблицы, которые являются источником ряда денормализованных представлений. Похоже, что происходит то, что таблицы не имеют возможности пылесосить перед следующим запуском ETL, что создает спираль, которая в конечном итоге приводит к полному замедлению.
Вопрос!
Оказывает ли Upsert фундаментальное негативное влияние на фрагментацию, и если да, то что используют другие люди? Я заинтересован в том, чтобы реализовать некоторые материализованные представления и переместить большинство наших индексов в новые представления, сохраняя при этом только индекс PK для таблиц, в которые мы пишем, но я не уверен, что это решит проблему, которую я вижу с раздуванием .
Я немного прочитал этот вопрос, но ничего не решено, например -> https://www.targeted.org/articles/databases/fragmentation.html
Спасибо за вашу помощь