Files
healthlog/docs/backlog/pereborka-ne-vlezaet-v-pamyat.md
T
av ebd59af056 беклог: две задачи из разбора reindex
- целостность собранной витрины проверяется отпечатком на открытом
  дескрипторе — перед необратимой подменой нужен integrity_check
- пересборка материализует учёт и список путей архива целиком: расход
  памяти растёт вместе с журналом
2026-08-02 09:11:53 +03:00

2.0 KiB

Пересборка держит весь журнал в памяти

Приоритет: низкий

healthlog reindex материализует целиком две вещи: учёт доставок из базы и список путей архива. На сегодняшнем объёме (сотня тел) это незаметно, на квартальном (~12 тысяч) — терпимо, а дальше растёт линейно и без предела: журнал по определению не подчищается до следующего проверенного экспорта.

Отдельно к этому примешивается размер заголовков: MaxHeaderBytes у сервера не задан, то есть верхней границы у колонки delivery.headers нет вовсе. Раздутый заголовок множится на число доставок.

Порог, за которым это перестаёт быть теорией, не измерен — с него и стоит начинать, если задача берётся. Лечится потоковым перечислением журнала (курсор по учёту, обход каталога партиями по суткам) вместо двух срезов в памяти.

Сегодня недостижимо, поэтому приоритет низкий. Естественно склеивается с ретеншеном сырого архива: та задача задаёт, где у журнала конец, эта — как его читать, не поднимая целиком.

Готово, когда пересборка на журнале в десятки тысяч доставок идёт с потреблением памяти, не зависящим от его длины.

Связано: internal/replay, cmd/healthlog/reindex.go.