|
fix: разовый VACUUM — после разряжения и по состоянию файла
incremental_vacuum отдаёт по одной странице за вызов (замерено: 50 вызовов — 50 страниц, 200 КБ), так что распухший файл он не сжимает, а разовый VACUUM срабатывал при старте ДО первого прохода разряжения — когда удалять ещё нечего, — и на следующем старте уже не запускался: режим auto_vacuum к тому моменту включён. Теперь первый проход разряжения делает lifespan, VACUUM идёт после него, а признак — состояние самого файла: режим не включён либо свободные страницы занимают больше четверти. Ошибка прохода откатывает транзакцию и не мешает старту панели; нехватка места под VACUUM — тоже не ошибка старта, только запись причины в лог. Замер на синтетике «как прод» (14 суток, интервал 30 с, ~6.4 КБ JSON на точку, 330.7 МБ, auto_vacuum=0): старт удаляет 33 247 строк, схлопывает 4 202 бакета и сжимает файл 332.9 → 58.5 МБ; повторный старт не делает ничего. |
|---|
|
|
| panel/backend/app/db.py |
|---|
| panel/backend/app/main.py |
|---|
| panel/backend/app/metrics_retention.py |
|---|