Runbook: BufferPoolPressure
Source of truth:
tools/observability/alerts/angarabase_alerts.yaml. Backed by: RM-0.6.3.8 S7.
Что означает
Buffer pool hit ratio упал ниже 90 % (метрика angarabase_buffer_pool_hit_ratio_milli < 900)
на протяжении 10 минут. Каждое page-чтение всё чаще идёт на диск, а не из памяти.
Severity
warning. Производительность чтений деградирует; ещё не critical.
Initial response
- Grafana Overview v2 → row “Buffer Pool & Memory”.
- Сравнить
pages_loadedrate сpages_evictedrate — есть ли churn. - Проверить
angarabase_jemalloc_resident_bytes— растёт ли RSS (намёк на leak).
Diagnostics
# Текущая ёмкость и загрузка буферного пула (RM-0.6.6.3 S6-D2)
curl -sf http://127.0.0.1:9898/metrics | rg "buffer_pool_capacity|buffer_pool_hit|buffer_pool_miss"
# Пример вывода:
# angarabase_buffer_pool_capacity_pages 195797 ← авто-детект 25% AvailRAM (3.0 GiB)
# angarabase_buffer_pool_hit_total 4120000
# angarabase_buffer_pool_miss_total 380000
curl -sf http://127.0.0.1:9898/metrics | rg buffer_pool
curl -sf http://127.0.0.1:9898/metrics | rg jemalloc
# Top tables by reads
psql -c "SELECT relname, heap_blks_read, heap_blks_hit \
FROM pg_statio_user_tables ORDER BY heap_blks_read DESC LIMIT 10;"
Mitigation
-
Авто-сайзинг (RM-0.6.6.3): начиная с этого релиза движок автоматически определяет размер буферного пула при старте: 25% от
MemAvailable/proc/meminfo, clamp [1.6 GiB, 32 GiB]. Перезапуск после освобождения памяти на хосте часто решает проблему без изменения конфига.Для принудительного значения:
export ANGARABASE_STORAGE_MAX_CACHED_PAGES=<N>перед стартом, где N = количество 16 KiB страниц (например, 200000 ≈ 3.1 GiB). -
Working set > RAM: рассмотреть partition или archival старых данных.
-
GC churn: проверить GCBloatHigh — bloat увеличивает working set.
-
Memory leak: см. jemalloc-profiling.md.
Escalation
Если hit ratio не восстанавливается после изменения config / рестарта — diagnostics bundle.
Связанные
- Performance tuning guide
- Configuration schema reference
- jemalloc profiling
- Backpressure Coordinator (RM-0.6.3.9 §S5+§S9) —
unified pool/WAL/uncommitted-pages backpressure decisions, including
the
pool_wait_timeout_msknob,angarabase_buffer_pool_over_capacity_pages,angarabase_buffer_pool_evict_failed_total,angarabase_buffer_pool_waiter_wait_secondshistogram, and theBufferPoolError::WaitTimeoutSQL error path (RM-0.6.3.9 §S2+§S8 capacity waiter). - Resource Advisors v0 (RM-0.6.3.9 §S10) —
angarabase_memory_pressure_ratiocorrelates with sustainedBufferPoolPressureevents when working-set growth, not churn, is the cause.