Files
healthlog/docs/tasks/items/rebuild-memory-footprint.md
T
av d79189be18 docs: документация переведена на канон av-dev-pm
- беклог и план переехали в docs/tasks (38 задач, 11 целей), слаги
  переименованы с транслита на английские, 85 ссылок поправлены
- conventions.md разобран в docs/conventions/, local-research.md — в
  docs/research/, review-journal.md — в docs/review.md с разделом настройки
  конвейера; заведены security.md, adr/ и .pm.json
- шаг docs.py check добавлен в task gate; поведение в architecture.md помечено
  девятью маркерами долга, database.md получил настройки с числовым значением
2026-08-03 17:14:53 +03:00

27 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Пересборка держит весь журнал в памяти
**Секция:** ядро · **Хук:** Учёт доставок и список путей архива материализуются целиком: расход растёт вместе с журналом, а у журнала конца нет · **Теги:** goal:journal-and-rebuild
`healthlog reindex` материализует целиком две вещи: учёт доставок из базы и
список путей архива. На сегодняшнем объёме (сотня тел) это незаметно, на
квартальном (~12 тысяч) — терпимо, а дальше растёт линейно и без предела:
журнал по определению не подчищается до следующего проверенного экспорта.
Отдельно к этому примешивается **размер заголовков**: `MaxHeaderBytes` у
сервера не задан, то есть верхней границы у колонки `delivery.headers` нет
вовсе. Раздутый заголовок множится на число доставок.
Порог, за которым это перестаёт быть теорией, не измерен — с него и стоит
начинать, если задача берётся. Лечится потоковым перечислением журнала
(курсор по учёту, обход каталога партиями по суткам) вместо двух срезов в
памяти.
Сегодня недостижимо, поэтому приоритет низкий. Естественно склеивается с
[ретеншеном сырого архива](raw-archive-retention.md): та задача задаёт, где
у журнала конец, эта — как его читать, не поднимая целиком.
Готово, когда пересборка на журнале в десятки тысяч доставок идёт с потреблением
памяти, не зависящим от его длины.
Связано: `internal/replay`, `cmd/healthlog/reindex.go`.