беклог: две задачи из разбора reindex
- целостность собранной витрины проверяется отпечатком на открытом дескрипторе — перед необратимой подменой нужен integrity_check - пересборка материализует учёт и список путей архива целиком: расход памяти растёт вместе с журналом
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
# Пересборка держит весь журнал в памяти
|
||||
|
||||
**Приоритет:** низкий
|
||||
|
||||
`healthlog reindex` материализует целиком две вещи: учёт доставок из базы и
|
||||
список путей архива. На сегодняшнем объёме (сотня тел) это незаметно, на
|
||||
квартальном (~12 тысяч) — терпимо, а дальше растёт линейно и без предела:
|
||||
журнал по определению не подчищается до следующего проверенного экспорта.
|
||||
|
||||
Отдельно к этому примешивается **размер заголовков**: `MaxHeaderBytes` у
|
||||
сервера не задан, то есть верхней границы у колонки `delivery.headers` нет
|
||||
вовсе. Раздутый заголовок множится на число доставок.
|
||||
|
||||
Порог, за которым это перестаёт быть теорией, не измерен — с него и стоит
|
||||
начинать, если задача берётся. Лечится потоковым перечислением журнала
|
||||
(курсор по учёту, обход каталога партиями по суткам) вместо двух срезов в
|
||||
памяти.
|
||||
|
||||
Сегодня недостижимо, поэтому приоритет низкий. Естественно склеивается с
|
||||
[ретеншеном сырого архива](retenshen-syrogo-arhiva.md): та задача задаёт, где
|
||||
у журнала конец, эта — как его читать, не поднимая целиком.
|
||||
|
||||
Готово, когда пересборка на журнале в десятки тысяч доставок идёт с потреблением
|
||||
памяти, не зависящим от его длины.
|
||||
|
||||
Связано: `internal/replay`, `cmd/healthlog/reindex.go`.
|
||||
Reference in New Issue
Block a user