GC auto-tuning
AngaraGC автоматически подстраивает бюджет сборки мусора под нагрузку по телеметрии:
- Bloat ratio — сколько мёртвых данных накопилось;
- Epoch lag — насколько активные транзакции отстают от закоммиченного состояния;
- Cycle latency — сколько длится цикл GC.
Контроллер использует обратную связь, балансируя агрессивную очистку (высокий бюджет) против влияния на латентность (низкий бюджет).
Включение
export ANGARABASE_GC_BACKGROUND=1 # фоновый GC-воркер
export ANGARABASE_GC_AUTO_TUNING=1 # контроллер авто-тюнинга
Или через конфиг ([gc] auto_tuning включён по умолчанию):
[gc]
auto_tuning = true
Цели контроллера фиксированы (заданы в реализации, не настраиваются):
bloat-target ≈ 20%, epoch-lag-target ≈ 1000, порог скачка латентности ≈ 100 мс,
границы бюджета 100..100000 строк/цикл, sleep 10..1000 мс. Контроллер никогда
не выходит за min/max бюджета.
Наблюдаемость
SELECT * FROM sys.gc_tuning_status;
Колонки:
current_budget— текущий бюджет GC (строк/цикл);sleep_ms— текущая пауза между циклами;tuning_decision— последнее решение (increase/decrease/hold).
Метрики Prometheus:
angarabase_gc_tuning_budget_tuples_per_cycle
angarabase_gc_tuning_sleep_ms
angarabase_gc_tuning_bloat_ratio_percent
angarabase_gc_tuning_min_active_epoch_lag
angarabase_gc_tuning_cycle_duration_ms_last
angarabase_gc_tuning_decision_total_increase
angarabase_gc_tuning_decision_total_decrease
angarabase_gc_tuning_decision_total_hold
Когда включать
- Переменная нагрузка — авто-тюнинг адаптируется к изменениям.
- Высокий риск bloat — поднимает бюджет при накоплении мёртвых версий.
- Латентность-чувствительные нагрузки — снижает бюджет при скачках задержки.
Когда не нужно: предсказуемая нагрузка со стабильным бюджетом (проще
статический режим — выключите авто-тюнинг и задайте фиксированный бюджет в
[gc]); либо при отладке GC, чтобы изолировать поведение фиксированным бюджетом.
Диагностика
Авто-тюнинг осциллирует (tuning_decision быстро чередует
increase/decrease): контроллер самокорректируется; если осцилляция устойчива,
отключите авто-тюнинг (ANGARABASE_GC_AUTO_TUNING=0) и используйте статический
бюджет.
Бюджет «залип» на min/max (current_budget упёрся в границу):
- на максимуме — bloat/lag устойчиво выше цели → разберитесь с нагрузкой;
- на минимуме — устойчивые скачки латентности → ищите GC-контеншн или снизьте объём GC-работы.
Дальше
После того как gc.auto_tuning включён и метрики GC стабилизировались:
- Диагностика — как читать
sys.healthи метрики GC под нагрузкой. - Мониторинг — какие алерты завести на «GC backlog растёт».
- Транзакции и MVCC — что именно AngaraGC чистит.