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

Observability Metrics Reference

Полный справочник метрик AngaraBase с диагностическими маршрутами и quick reference card. Каноничный источник: этот runbook в angarabook/src/operations/.


Quick Reference Card (Top-10 для wallboard)

Распечатайте и повесьте у дежурного. Эти 10 метрик закрывают 80% production incidents.

#МетрикаТипНормальный диапазонЧто значит выход за границу
1angarabase_connections_activegauge< 80% max_poolConnection leak / отсутствие PgBouncer — проверить angara_stat_activity
2angarabase_txn_rollback_total (rate 1m)counter rate< 5% от commit rateАномальный rollback rate — конфликты MVCC, deadlock или баги приложения
3angarabase_storage_dirty_pages_totalgauge< 10 000 стр.Checkpoint не успевает — снизить write rate или уменьшить checkpoint interval
4angarabase_checkpoint_errors_total (change)counter0Ошибка checkpoint = критичный инцидент; смотреть логи немедленно
5angarabase_transaction_log_flush_lsn vs durable_lsn (delta)gauge< 1 МББольшой gap = WAL durability lag; риск потери данных при crash
6angarabase_query_exec_duration_ms_bucket P99histogram< 100 msP99 деградация — смотреть angara_stat_activity + EXPLAIN
7angarabase_buffer_pool_miss_total (rate)counter rate< 20% hit/missНизкий cache hit ratio — увеличить buffer_pool_size_mb
8angarabase_memory_rss_bytesgauge< soft_limit*0.9Приближение к soft limit — OOM risk; проверить query patterns + GC
9angarabase_qos_rejected_critical_total (rate)counter rate0Любые CRITICAL rejections = production incident candidate
10angarabase_uptime_secondsgaugeмонотонно растётЗначение < 60 после паузы = unexpected restart / crash

Полный справочник метрик

Соединения и сессии

МетрикаТипЧто измеряетНормаВыход за границу
angarabase_connections_activegaugeАктивные клиентские соединения< max_pool * 0.8Проверить pool config, connection leaks
angarabase_connections_accepted_totalcounterВсего соединений с момента стартамонотонноВнезапный всплеск rate — DDoS или reconnect storm
angarabase_pgwire_active_tasksgaugeАктивные spawn_blocking задачи pgwire≤ max_blocking_threadsSaturation blocking runtime path
angarabase_session_claims_set_totalcounterУстановки session claims (app.*)Используется для audit trail

Диагностика соединений:

SELECT pid, state, consumer_id, wait_event FROM angara_stat_activity;

Транзакции и MVCC

МетрикаТипЧто измеряетНормаВыход за границу
angarabase_txn_begin_totalcounterВсего BEGINBaseline для throughput
angarabase_txn_commit_totalcounterВсего COMMITrate(1m) = TPS
angarabase_txn_rollback_totalcounterВсего ROLLBACK< 5% от commitКонфликты, ошибки приложения
angarabase_txn_active_countgaugeТранзакций в полёте< 100 (OLTP)Долгие txn — проверить txn_oldest_snapshot_age_seconds
angarabase_txn_commit_conflicts_totalcounterКонфликты MVCCблизко к 0Высокий rate = конкурирующие writes на одни строки
angarabase_txn_oldest_snapshot_age_secondsgaugeВозраст старейшего snapshot< 60sДолгий snapshot блокирует GC → GC bloat
angarabase_mvcc_history_versions_totalgaugeВерсий в MVCC storeрастёт медленноБыстрый рост = GC не успевает (см. MVCC GC runbook)
angarabase_txn_commit_epoch_currentgaugeТекущая commit epochмонотонноНе меняется > 30s при нагрузке = проблема WAL

PromQL — TPS:

rate(angarabase_txn_commit_total[1m])

PromQL — Conflict ratio:

rate(angarabase_txn_commit_conflicts_total[5m]) / rate(angarabase_txn_commit_total[5m])

WAL и durability

МетрикаТипЧто измеряетНормаВыход за границу
angarabase_transaction_log_flush_lsngaugeLSN последней flushмонотонноОстановка роста = WAL writer hung
angarabase_transaction_log_durable_lsngaugeLSN последнего fsync (глобально)≤ flush_lsngap > 1 МБ = durability lag
angarabase_wal_durable_lsn{db="<name>"}gaugePer-DB durable LSN после последнего успешного per-DB checkpointмонотонно растёт под нагрузкойОстановка роста при активных write в эту БД = checkpoint этой БД не продвигается. Scope: только пользовательские БД (CREATE DATABASE); дефолтная base и системный WAL используют main txlog и здесь НЕ отражены — их durability смотрите по глобальному angarabase_transaction_log_durable_lsn. Серия для БД появляется только после первого успешного per-DB checkpoint этой БД; её отсутствие до этого момента — норма (checkpoint ещё не было), а не сбой.
angarabase_transaction_log_last_checkpoint_idgaugeID последнего checkpointмонотонно
angarabase_transaction_log_checkpoint_end_valid_totalcounterУспешных checkpoint endsмонотонно
angarabase_transaction_log_checkpoint_end_invalid_totalcounterНевалидных checkpoint ends0> 0 = повреждение WAL
angarabase_wal_sync_wait_totalcounterWAL sync waits (strict mode)rate растёт = I/O latency
angarabase_wal_group_commit_wait_totalcounterWAL group commit waitsrate растёт = group commit backlog
angarabase_transaction_log_bytes_appended_totalcounterБайт записано в WALWAL write throughput
angarabase_wal_redo_heap_rows_reconstructed_totalcounterСтроки, восстановленные из WAL redo в HeapStore0 (steady)> 0 только при recovery после crash
angarabase_wal_redo_heap_pages_written_totalcounterСтраницы HeapStore, записанные WAL redo pass0 (steady)> 0 только при recovery после crash

PromQL — WAL durability gap (байт):

angarabase_transaction_log_flush_lsn - angarabase_transaction_log_durable_lsn

PromQL — per-DB durable LSN (прогресс checkpoint по БД, RM-0.6.7.12):

# durable LSN конкретной пользовательской БД
angarabase_wal_durable_lsn{db="orders"}

# БД, чей durable_lsn не двигался 5 мин (checkpoint stall):
# ВНИМАНИЕ: метрика обновляется только на per-DB checkpoint, поэтому для
# idle-БД (без write) значение тоже не меняется — это НЕ stall. Сопоставляйте
# с активностью записи (напр. с ростом angarabase_transaction_log_bytes_appended_total).
changes(angarabase_wal_durable_lsn[5m]) == 0

PromQL — восстановление строк при последнем старте (S2):

# Instant value показывает итог последнего recovery pass
angarabase_wal_redo_heap_rows_reconstructed_total

Note: Метрики angarabase_wal_redo_heap_* инкрементируются только во время WAL redo pass при старте после некорректного завершения (SIGKILL/crash). В стабильном состоянии (steady state) их значения не меняются.


Storage и buffer pool

МетрикаТипЧто измеряетНормаВыход за границу
angarabase_storage_dirty_pages_totalgaugeГрязные страницы в памяти< 10 000Checkpoint lag; снизить write rate или checkpoint_interval
angarabase_storage_cached_pages_totalgaugeЗакэшированные страницырастёт до bp sizeВнезапное падение = eviction storm
angarabase_buffer_pool_hit_totalcounterCache hitshit rate = hits / (hits + misses)
angarabase_buffer_pool_miss_totalcounterCache missesmiss rate > 20% = нужен больший buffer pool
angarabase_buffer_pool_warmup_pages_totalcounterСтраниц загружено при warmupПосле restart
angarabase_storage_flush_ok_totalcounterУспешных flushмонотонно
angarabase_storage_backpressure_events_totalcounterBackpressure events0> 0 = writer faster than disk
angarabase_storage_backpressure_commit_rejected_totalcounterCommit rejected by backpressure0Производительность I/O недостаточна
angarabase_storage_flush_bytes_totalcounterБайт сброшено на дискI/O write throughput

PromQL — Buffer pool hit ratio:

rate(angarabase_buffer_pool_hit_total[5m]) /
  (rate(angarabase_buffer_pool_hit_total[5m]) + rate(angarabase_buffer_pool_miss_total[5m]))

Checkpoint и bgwriter

МетрикаТипЧто измеряетНормаВыход за границу
angarabase_checkpoint_totalcounterУспешных чекпоинтов> 0 за 5 мин= 0 за 10 мин = checkpoint stopped
angarabase_checkpoint_errors_totalcounterОшибок checkpoint0Немедленно смотреть логи
angarabase_checkpoint_dirty_pagesgaugeГрязных страниц на момент checkpoint< 5 000Высокое значение = checkpoint не успевает
angarabase_checkpoint_duration_ms_sumcounterСуммарное время checkpoint (мс)avg = sum/count
angarabase_checkpoint_aborted_totalcounterПрерванных checkpoint0> 0 = отмены; проверить причину
angarabase_checkpoint_per_db_timeout_totalcounterPer-DB checkpoint timeouts0timeout = диск слишком медленный
angarabase_wal_forced_checkpoints_totalcounterПринудительных checkpoint по backpressure0> 0 = write pressure критична
angarabase_overlay_flush_on_checkpoint_slots_totalcounterOverlay-слоты, сброшенные в heap при checkpointИнтенсивность материализации overlay
angarabase_overlay_flush_on_checkpoint_tables_totalcounterТаблицы, затронутые overlay flush

SQL — состояние bgwriter:

SELECT * FROM angara_stat_bgwriter;

PromQL — checkpoint avg duration:

rate(angarabase_checkpoint_duration_ms_sum[5m]) / rate(angarabase_checkpoint_duration_ms_count[5m])

PromQL — интенсивность материализации overlay (S1):

# Индикатор давления на HeapStore со стороны overlay-слоев
rate(angarabase_overlay_flush_on_checkpoint_slots_total[5m])

Query execution

МетрикаТипЧто измеряетНормаВыход за границу
angarabase_query_exec_total_ok_selectcounterSELECT queries OKQPS baseline
angarabase_query_exec_total_ok_writecounterWrite queries OKWrite TPS
angarabase_query_exec_total_err_selectcounterSELECT errorsблизко к 0rate растёт = баги или перегрузка
angarabase_query_exec_duration_ms_buckethistogramLatency distributionP99 < 100msP99 > 500ms = деградация
angarabase_slow_query_totalcounterSlow queries (> threshold)0> 0 = нужен EXPLAIN slow queries
angarabase_sql_routing_not_supported_totalcounterUnsupported SQL routes0> 0 = приложение использует неподдерживаемый SQL
angarabase_legacy_fallback_triggered_totalcounterLegacy path fallbacks0> 0 = unsupported query план
angarabase_simd_agg_fallback_totalcounterFallback SIMD агрегации на скалярный путь0> 0 = отсутствие поддержки AVX2/NEON или несовместимость типов
angarabase_adaptive_probe_swap_totalcounterКоличество адаптивных переключений сторон Hash JoinПоказывает активность оптимизатора при перекосе размеров таблиц

PromQL — P99 latency:

histogram_quantile(0.99,
  rate(angarabase_query_exec_duration_ms_bucket[5m])
)

SQL — медленные запросы:

SELECT query, calls, mean_exec_time_ms, max_exec_time_ms
FROM angara_stat_statements
ORDER BY mean_exec_time_ms DESC LIMIT 10;

Memory

МетрикаТипЧто измеряетНормаВыход за границу
angarabase_memory_rss_bytesgaugeRSS процесса (байт)< soft_limit * 0.9OOM risk; проверить query patterns
angarabase_memory_soft_limit_exceeded_totalcounterПревышений soft_limit_mb0> 0 = память под давлением
angarabase_tx_overlay_dataset_bytes_totalgaugeIn-memory tx overlay size< 512 МББольшие txn держат много данных в памяти

QoS Scheduler

МетрикаТипЧто измеряетНормаВыход за границу
angarabase_qos_rejected_critical_totalcounterОтказов CRITICAL queue0Incident candidate — немедленный triage
angarabase_qos_rejected_interactive_totalcounterОтказов INTERACTIVE queue0User-facing degradation
angarabase_qos_rejected_background_totalcounterОтказов BACKGROUND queueСнизить background concurrency
angarabase_qos_blocking_inflightgaugeБлокирующих задач< max_blockingscheduler saturation
angarabase_spawn_blocking_activegaugeАктивных spawn_blocking< max_blocking

Troubleshooting by Dashboard

Маршрут 1: Высокий P99 latency

angarabase_query_exec_duration_ms P99 > 500ms?
  │
  ├─ Да → angara_stat_activity: есть waiting sessions?
  │        │
  │        ├─ Да (wait_event != '') → Lock contention или WAL sync wait
  │        │   → смотреть angarabase_txn_commit_conflicts_total
  │        │   → смотреть angarabase_wal_sync_wait_total
  │        │
  │        └─ Нет → angara_stat_statements: top queries by max_exec_time_ms
  │            → EXPLAIN на топ-запрос
  │            → проверить buffer_pool_miss_total rate (I/O bound?)
  │
  └─ Нет → baseline нормальный, false alarm

SQL:

SELECT query, calls, max_exec_time_ms, mean_exec_time_ms
FROM angara_stat_statements
ORDER BY max_exec_time_ms DESC LIMIT 5;

Маршрут 2: QPS Drop (внезапное падение SELECT rate)

rate(angarabase_query_exec_total_ok_select[1m]) резко упал?
  │
  ├─ connections_active тоже упал → процесс restarted? uptime < 60s?
  │   → смотреть логи на panic / OOM / segfault
  │
  ├─ connections_active высокий, QPS низкий → scheduler saturation?
  │   → qos_rejected_* > 0?
  │   → qos_blocking_inflight высокий?
  │   → spawn_blocking_active ≈ spawn_blocking_max?
  │
  └─ Connections нормальные → долгая транзакция блокирует?
      → angara_stat_activity WHERE state = 'idle in transaction'
      → txn_oldest_snapshot_age_seconds > 60s?

Маршрут 3: GC Pressure / MVCC bloat

mvcc_history_versions_total монотонно растёт без снижения?
  │
  ├─ txn_oldest_snapshot_age_seconds > 120s → долгий открытый snapshot
  │   → найти pid из angara_stat_activity ORDER BY query_start ASC
  │   → завершить или дождаться завершения
  │
  ├─ columnar_pending_deleted_rows > 1M → compaction lagging
  │   → проверить Background Compactor в angara_stat_activity
  │   → временно SET angarabase.compaction_enabled = true
  │
  └─ memory_rss_bytes растёт вместе → GC bloat + memory pressure
      → смотреть mvcc-gc.md runbook

Маршрут 4: Checkpoint Issues

checkpoint_errors_total изменился?
  │
  ├─ Да → немедленно смотреть логи (disk full? I/O error?)
  │   → storage_backpressure_events_total > 0?
  │   → df -h на data directory
  │
  └─ Нет, но dirty_pages_total высокий (> 10 000)?
      → checkpoint не поспевает за writes
      → снизить checkpoint_interval_ms
      → или ограничить write throughput
      → SQL: SELECT * FROM angara_stat_bgwriter;

Memory and Buffer Pool Metrics (RM-0.6.5.8)

Goal

Держать минимально достаточный набор сигналов для:

  • durability;
  • concurrency/locks;
  • storage/checkpoint;
  • recovery.

Metrics source

  • ANGARABASE_METRICS_ADDR=host:port
  • endpoint: GET /metrics (Prometheus format)

Must-have groups

  • Transactions / concurrency
  • Transaction log / durability
  • Locks
  • Storage / writeback / checkpoint
  • Query diagnostics / stats
  • Recovery / replay outcomes

Memory and Buffer Pool Metrics (RM-0.6.5.8)

МетрикаТипСмысл
angarabase_memory_rss_bytesgaugeResident Set Size процесса сервера в байтах. Обновляется каждые 5с.
angarabase_memory_soft_limit_exceeded_totalcounterКоличество пересечений порога soft_limit_mb (edge-trigger).
angarabase_buffer_pool_warmup_evictions_during_warmup_totalcounterКоличество вытеснений страниц из buffer pool во время прогрева (warmup cap enforcement).
angarabase_buffer_pool_warmup_completed_pagescounterКоличество страниц, загруженных при прогреве.
angarabase_buffer_pool_warmup_aborted_at_cap_totalcounterWarmup прерван из-за превышения cap (>95%).

PromQL — Алерт при приближении к soft limit:

# Замените <soft_limit_bytes> на значение soft_limit_mb * 1024 * 1024
# Например, для soft_limit_mb = 4096: порог = 4294967296
angarabase_memory_rss_bytes > <soft_limit_bytes> * 0.9

Storage and Checkpoint Metrics (RM-0.6.5.8)

МетрикаТипСмысл
angarabase_checkpoint_totalcounterОбщее число выполненных чекпоинтов. > 0 после 5 мин uptime подтверждает работу auto-checkpoint.

Visibility Map and Index-Only Scan (RM-0.6.4.3)

МетрикаТипСмысл
angarabase_visibility_map_all_visible_fractiongaugeДоля all-visible страниц (сигнал для планировщика).
angarabase_index_only_scan_hits_totalcounterУспешные Index-Only Scan (без обращения к Heap).
angarabase_index_only_scan_heap_fetches_totalcounterFallback на Heap при Index-Only Scan (бит VM=0).
angarabase_visibility_map_rebuild_pages_remaininggaugeОстаток страниц для фонового восстановления VM.
angarabase_visibility_map_corrupt_totalcounterОбнаруженные повреждения VM (триггер rebuild).

Конкретные имена метрик с привязкой к dashboard-панелям: см. таблицу Полный contract имён фиксируется тестом, ссылка ниже в «Contract pinning».

Новые метрики RM-0.6.4.0 (WAL Commit-Path + Durability)

Добавлены в Sprint 2/3 RM-0.6.4.0 (RFC-2026-090). Покрывают новый режим sync_at_commit и группу durability barrier.

curl -sf http://127.0.0.1:9898/metrics | rg "wal_(sync_wait|group_commit_wait)|wait_events_total\\{event=\"wal_"
МетрикаТипСмысл
angarabase_wal_sync_wait_totalcounterЧисло commit-wait событий по пути IO::WalSync (строгая durability).
angarabase_wal_group_commit_wait_totalcounterЧисло commit-wait событий по пути IO::WalGroupCommit (батчевый durability wait).
angarabase_wait_events_total{event="wal_sync"}counterУнифицированный wait-event счётчик по WAL sync пути.
angarabase_wait_events_total{event="wal_group_commit"}counterУнифицированный wait-event счётчик по group-commit пути.

Диагностика по режиму

  • relaxed: wal_sync_wait_total и wal_group_commit_wait_total близки к 0.
  • group_commit: растёт wal_group_commit_wait_total; wal_sync_wait_total обычно заметно ниже.
  • sync_at_commit / strict: растёт wal_sync_wait_total; wait_events_total{event="wal_sync"} отражает долговременную нагрузку sync-path.

Режим durability проверяется через env ANGARABASE_TRANSACTION_LOG_DURABILITY. SQL SET durability / COMMIT WITH DURABILITY зарезервированы для v0.6.5 → SQLSTATE 0A000. Подробнее: WAL writer contract spec (wal_writer_contract_v0.md) и RFC-2026-090.

HTAP / Vector Execution Metrics (RM-0.6.4.13 / RM-0.6.4.14 / RM-0.6.6.9)

HTAP-специфичные метрики для диагностики векторного и stream-пути выполнения. Контракт меток стабильный начиная с v0.6.x.

curl -sf http://127.0.0.1:9898/metrics | grep -E "scan_stream|vector_fallback|vector_memory|columnar_manifest|vector_columnar_native|columnar_batched_scan|segments_pruned|parallel_agg|vector_numeric_float_backed|vector_columnar_grouped_agg"
МетрикаТипСмысл
angarabase_scan_stream_materialize_total{reason="batch_to_rows"}counterМатериализация на границе batch→rows.
angarabase_scan_stream_materialize_total{reason="drain_rows_default"}counterМатериализация через drain_rows (fallback default).
angarabase_scan_stream_materialize_total{reason="stream_to_relation_boundary"}counterМатериализация на границе stream→relation.
angarabase_scan_stream_fallback_totalcounterFallback stream-плана на legacy executor.
angarabase_vector_fallback_totalcounterFallback vector-пути на row-путь (неподдерживаемый план или ошибка типа).
angarabase_vector_columnar_native_totalcounterУспешные активации нативного векторного пути для columnar таблиц.
angarabase_columnar_batched_scan_batches_totalcounterВсего обработанных колоночных батчей в нативном пути.
angarabase_columnar_segments_pruned_totalcounterКоличество сегментов, отсеченных по метаданным (zone-map pruning).
angarabase_parallel_agg_totalcounterКоличество запусков параллельного агрегатора.
angarabase_vector_memory_budget_exceeded_totalcounterОтказ выделения бюджета вектора (SQLSTATE 53100).
angarabase_columnar_manifest_init_failed_totalcounterОшибка init SegmentManifest при CREATE TABLE USING COLUMNAR.
angarabase_vector_numeric_float_backed_totalcounterLossy-mapping: numeric(p,s>0) → Float64 в vector-пути (RM-0.6.7.15). Ненулевое = float-потеря точности. Подробнее: vector-numeric-columnar-agg-metrics.md.
angarabase_vector_columnar_grouped_agg_totalcounterGROUP BY выполнен колоночным hash-agg путём (не row-fallback). Path-signal (RM-0.6.7.15).

Примечание: метки reason= у angarabase_scan_stream_materialize_total — стабильный оператор-facing контракт в рамках v0.6.x.

Columnar DV Pressure (RM-0.6.4.19 Track C C2)

angarabase_columnar_pending_deleted_rows — signed gauge, показывающий суммарное количество логически удалённых строк в живых сегментах, ещё не reclaimed compaction.

  • Increment при AttachDeleteVector (при каждом columnar DELETE): +row_count из DV op.
  • Decrement при compact_l0_to_l1: -rows_reclaimed по числу строк, не вошедших в L1 pack.

В норме gauge растёт после DELETE и снижается после Background Compactor runа. Если gauge монотонно растёт — compaction lagging или compaction полностью отключён.

curl -sf http://127.0.0.1:9898/metrics | rg "pending_deleted_rows"

Alert правило (DV fragmentation)

# Alert если накопленный DV pressure > 5 млн строк.
angarabase_columnar_pending_deleted_rows > 5_000_000

Рекомендуемые severity:

  • warning при превышении >1M строк — compaction, вероятно, отстаёт;
  • critical при превышении >10M строк — возможна деградация scan performance.

Интерпретация:

  • gauge ≤ 0 — нормально (все DV reclaimed, возможно небольшой transient underflow при replay);
  • gauge растёт без уменьшения > 30 минут — проверьте Background Compactor (angara_stat_activity, angarabase_columnar_compaction_total).
МетрикаТипСмысл
angarabase_columnar_pending_deleted_rowsgauge (signed)Net pending-deleted rows по всем columnar сегментам.

Heap fetch fallback reason metrics (RM-0.6.5.6)

  • angarabase_heap_point_fetch_fallback_reason_stale_tid_index_total — fallback из-за stale tid index
  • angarabase_heap_point_fetch_fallback_reason_not_found_total — fallback из-за row not found

Быстрая проверка (curl):

curl -s http://localhost:8080/metrics | grep "fallback_reason"
# angarabase_heap_point_fetch_fallback_reason_stale_tid_index_total 0
# angarabase_heap_point_fetch_fallback_reason_not_found_total 0

PromQL — rate fallback по причинам:

rate(angarabase_heap_point_fetch_fallback_reason_stale_tid_index_total[5m])
rate(angarabase_heap_point_fetch_fallback_reason_not_found_total[5m])

Если stale_tid_index растёт — возможна проблема с V3 chain path или index rebuild. Если not_found растёт — возможна потеря данных или баг в MVCC visibility.

QoS Scheduler и spawn_blocking (RM-0.6.4.10 / RM-0.6.4.19)

RM-0.6.4.10 добавляет runtime-сигналы для QoS scheduler и blocking path. Они помогают отличать SQL contention от scheduler saturation: если растут QoS rejections или qos_blocking, проблема находится в очередях выполнения, а не в row/table locks.

curl -sf http://127.0.0.1:9898/metrics | rg "qos_(queued|rejected|blocking)|spawn_blocking"
МетрикаТипСмысл
angarabase_qos_queued_critical_totalcounterВсего задач поставлено в QoS CRITICAL queue.
angarabase_qos_queued_interactive_totalcounterВсего задач поставлено в QoS INTERACTIVE queue.
angarabase_qos_queued_background_totalcounterВсего задач поставлено в QoS BACKGROUND queue.
angarabase_qos_rejected_critical_totalcounterОтказы CRITICAL queue с SQLSTATE 53600.
angarabase_qos_rejected_interactive_totalcounterОтказы INTERACTIVE queue с SQLSTATE 53600.
angarabase_qos_rejected_background_totalcounterОтказы BACKGROUND queue с SQLSTATE 53600.
angarabase_qos_blocking_inflightgaugeТекущие blocking tasks across QoS shards.
angarabase_spawn_blocking_maxgaugeЛимит spawn_blocking threads из настройки max_blocking_threads; 0 до startup init.
angarabase_spawn_blocking_activegaugeАктивные spawn_blocking задачи. Инкрементируется при запуске, декрементируется при завершении через SpawnBlockingGuard (RM-0.6.4.19 Track C C2).

Очереди QoS по уровням:

rate({__name__=~"angarabase_qos_queued_.*_total"}[5m])

Отказы QoS по уровням:

rate({__name__=~"angarabase_qos_rejected_.*_total"}[5m])

Alert на любой отказ scheduler:

sum(rate({__name__=~"angarabase_qos_rejected_.*_total"}[5m])) > 0

Blocking pressure:

angarabase_qos_blocking_inflight > 0

Запас blocking budget:

angarabase_spawn_blocking_max - angarabase_spawn_blocking_active

Интерпретация:

  • растёт queued_background_total, но нет rejected_* — scheduler принимает batch workload, обычно это нормальная картина;
  • растёт rejected_background_total — batch/ETL слишком агрессивен, снижайте concurrency или повышайте ANGARABASE_QOS_MAX_QUEUED;
  • растёт rejected_critical_total — это production incident candidate: CRITICAL workload не должен регулярно упираться в queue cap;
  • qos_blocking_inflight > 0 вместе with ростом qos_blocking wait event означает pressure в blocking runtime path.

Query Execution Duration Histogram (RM-0.6.5.10)

angarabase_query_exec_duration_ms — histogram задержки выполнения SQL-запросов.

Note (RM-0.6.5.10 S6): histogram_quantile(0.99) корректен только если значение < 10 000ms. При p99 ≥ 10 000ms смотреть долю в bucket +Inf. Buckets: [1,5,10,50,100,500,1000,2500,5000,10000,+Inf] ms.

SLO-oriented usage

  • Latency: histogram_quantile() по *_bucket (p95/p99)
  • Throughput: rate() по counters
  • Errors/contention: conflict/timeout/deadlock rates
  • Saturation: backpressure counters and queue depth

Contract pinning

Имена must-have метрик считаются частью operability contract и защищаются тестом:

  • crates/angarabase/src/metrics.rs
  • prometheus_export_contains_must_have_metrics_names

Дальше

Materialized View Metrics

MetricTypeDescription
angarabase_mv_refresh_totalcounterTotal number of materialized view refreshes. Labels: {mode, status}.
angarabase_mv_refresh_duration_mshistogramDuration of materialized view refresh operations. Labels: {mode}.
angarabase_mv_auto_refresh_scheduled_totalcounterNumber of automatically triggered (scheduled) refreshes.
angarabase_mv_auto_refresh_lag_secondsgaugeLag between the scheduled refresh time and actual refresh time. Labels: {mv}.
angarabase_mv_incremental_refresh_rows_applied_totalcounterNumber of rows applied during incremental (async) refreshes. Labels: {mv_name}.

Online DDL Metrics

MetricTypeDescription
angarabase_online_ddl_operations_totalcounterTotal number of Online DDL operations initiated. Labels: {op, status}.
angarabase_online_ddl_copy_rows_totalcounterTotal number of rows copied during the ghost-table phase. Labels: {table}.
angarabase_online_ddl_cutover_duration_mshistogramDuration of the final cutover phase (blocking).

Метрики статистики (RM-0.6.7.2)

МетрикаТипОписание
angarabase_stats_inline_updates_totalcounterЧисло inline-обновлений row_count_live на COMMIT. Ненулевое при активных DML транзакциях.
angarabase_stats_async_recalc_activegauge1 когда фоновый воркер активно выполняет гистограммный пересчёт, 0 — простой.
angarabase_stats_drift_ratiogaugeКоэффициент дрейфа статистики (0–1000, масштабировано). Растёт при большом числе DML без ANALYZE.
angarabase_optimizer_drift_fallback_totalcounterЧисло планов где HashJoin был пропущен из-за Snapshot Age Dampening (RFC-2026-196 §4).