Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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 стабилизировались: