Observability Metrics Reference
Полный справочник метрик AngaraBase с диагностическими маршрутами и quick reference card.
Каноничный источник: этот runbook в angarabook/src/operations/.
Quick Reference Card (Top-10 для wallboard)
Распечатайте и повесьте у дежурного. Эти 10 метрик закрывают 80% production incidents.
| # | Метрика | Тип | Нормальный диапазон | Что значит выход за границу |
|---|---|---|---|---|
| 1 | angarabase_connections_active | gauge | < 80% max_pool | Connection leak / отсутствие PgBouncer — проверить angara_stat_activity |
| 2 | angarabase_txn_rollback_total (rate 1m) | counter rate | < 5% от commit rate | Аномальный rollback rate — конфликты MVCC, deadlock или баги приложения |
| 3 | angarabase_storage_dirty_pages_total | gauge | < 10 000 стр. | Checkpoint не успевает — снизить write rate или уменьшить checkpoint interval |
| 4 | angarabase_checkpoint_errors_total (change) | counter | 0 | Ошибка checkpoint = критичный инцидент; смотреть логи немедленно |
| 5 | angarabase_transaction_log_flush_lsn vs durable_lsn (delta) | gauge | < 1 МБ | Большой gap = WAL durability lag; риск потери данных при crash |
| 6 | angarabase_query_exec_duration_ms_bucket P99 | histogram | < 100 ms | P99 деградация — смотреть angara_stat_activity + EXPLAIN |
| 7 | angarabase_buffer_pool_miss_total (rate) | counter rate | < 20% hit/miss | Низкий cache hit ratio — увеличить buffer_pool_size_mb |
| 8 | angarabase_memory_rss_bytes | gauge | < soft_limit*0.9 | Приближение к soft limit — OOM risk; проверить query patterns + GC |
| 9 | angarabase_qos_rejected_critical_total (rate) | counter rate | 0 | Любые CRITICAL rejections = production incident candidate |
| 10 | angarabase_uptime_seconds | gauge | монотонно растёт | Значение < 60 после паузы = unexpected restart / crash |
Полный справочник метрик
Соединения и сессии
| Метрика | Тип | Что измеряет | Норма | Выход за границу |
|---|---|---|---|---|
angarabase_connections_active | gauge | Активные клиентские соединения | < max_pool * 0.8 | Проверить pool config, connection leaks |
angarabase_connections_accepted_total | counter | Всего соединений с момента старта | монотонно | Внезапный всплеск rate — DDoS или reconnect storm |
angarabase_pgwire_active_tasks | gauge | Активные spawn_blocking задачи pgwire | ≤ max_blocking_threads | Saturation blocking runtime path |
angarabase_session_claims_set_total | counter | Установки session claims (app.*) | — | Используется для audit trail |
Диагностика соединений:
SELECT pid, state, consumer_id, wait_event FROM angara_stat_activity;
Транзакции и MVCC
| Метрика | Тип | Что измеряет | Норма | Выход за границу |
|---|---|---|---|---|
angarabase_txn_begin_total | counter | Всего BEGIN | — | Baseline для throughput |
angarabase_txn_commit_total | counter | Всего COMMIT | — | rate(1m) = TPS |
angarabase_txn_rollback_total | counter | Всего ROLLBACK | < 5% от commit | Конфликты, ошибки приложения |
angarabase_txn_active_count | gauge | Транзакций в полёте | < 100 (OLTP) | Долгие txn — проверить txn_oldest_snapshot_age_seconds |
angarabase_txn_commit_conflicts_total | counter | Конфликты MVCC | близко к 0 | Высокий rate = конкурирующие writes на одни строки |
angarabase_txn_oldest_snapshot_age_seconds | gauge | Возраст старейшего snapshot | < 60s | Долгий snapshot блокирует GC → GC bloat |
angarabase_mvcc_history_versions_total | gauge | Версий в MVCC store | растёт медленно | Быстрый рост = GC не успевает (см. MVCC GC runbook) |
angarabase_txn_commit_epoch_current | gauge | Текущая 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_lsn | gauge | LSN последней flush | монотонно | Остановка роста = WAL writer hung |
angarabase_transaction_log_durable_lsn | gauge | LSN последнего fsync (глобально) | ≤ flush_lsn | gap > 1 МБ = durability lag |
angarabase_wal_durable_lsn{db="<name>"} | gauge | Per-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_id | gauge | ID последнего checkpoint | монотонно | — |
angarabase_transaction_log_checkpoint_end_valid_total | counter | Успешных checkpoint ends | монотонно | — |
angarabase_transaction_log_checkpoint_end_invalid_total | counter | Невалидных checkpoint ends | 0 | > 0 = повреждение WAL |
angarabase_wal_sync_wait_total | counter | WAL sync waits (strict mode) | — | rate растёт = I/O latency |
angarabase_wal_group_commit_wait_total | counter | WAL group commit waits | — | rate растёт = group commit backlog |
angarabase_transaction_log_bytes_appended_total | counter | Байт записано в WAL | — | WAL write throughput |
angarabase_wal_redo_heap_rows_reconstructed_total | counter | Строки, восстановленные из WAL redo в HeapStore | 0 (steady) | > 0 только при recovery после crash |
angarabase_wal_redo_heap_pages_written_total | counter | Страницы HeapStore, записанные WAL redo pass | 0 (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_total | gauge | Грязные страницы в памяти | < 10 000 | Checkpoint lag; снизить write rate или checkpoint_interval |
angarabase_storage_cached_pages_total | gauge | Закэшированные страницы | растёт до bp size | Внезапное падение = eviction storm |
angarabase_buffer_pool_hit_total | counter | Cache hits | — | hit rate = hits / (hits + misses) |
angarabase_buffer_pool_miss_total | counter | Cache misses | — | miss rate > 20% = нужен больший buffer pool |
angarabase_buffer_pool_warmup_pages_total | counter | Страниц загружено при warmup | — | После restart |
angarabase_storage_flush_ok_total | counter | Успешных flush | монотонно | — |
angarabase_storage_backpressure_events_total | counter | Backpressure events | 0 | > 0 = writer faster than disk |
angarabase_storage_backpressure_commit_rejected_total | counter | Commit rejected by backpressure | 0 | Производительность I/O недостаточна |
angarabase_storage_flush_bytes_total | counter | Байт сброшено на диск | — | 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_total | counter | Успешных чекпоинтов | > 0 за 5 мин | = 0 за 10 мин = checkpoint stopped |
angarabase_checkpoint_errors_total | counter | Ошибок checkpoint | 0 | Немедленно смотреть логи |
angarabase_checkpoint_dirty_pages | gauge | Грязных страниц на момент checkpoint | < 5 000 | Высокое значение = checkpoint не успевает |
angarabase_checkpoint_duration_ms_sum | counter | Суммарное время checkpoint (мс) | — | avg = sum/count |
angarabase_checkpoint_aborted_total | counter | Прерванных checkpoint | 0 | > 0 = отмены; проверить причину |
angarabase_checkpoint_per_db_timeout_total | counter | Per-DB checkpoint timeouts | 0 | timeout = диск слишком медленный |
angarabase_wal_forced_checkpoints_total | counter | Принудительных checkpoint по backpressure | 0 | > 0 = write pressure критична |
angarabase_overlay_flush_on_checkpoint_slots_total | counter | Overlay-слоты, сброшенные в heap при checkpoint | — | Интенсивность материализации overlay |
angarabase_overlay_flush_on_checkpoint_tables_total | counter | Таблицы, затронутые 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_select | counter | SELECT queries OK | — | QPS baseline |
angarabase_query_exec_total_ok_write | counter | Write queries OK | — | Write TPS |
angarabase_query_exec_total_err_select | counter | SELECT errors | близко к 0 | rate растёт = баги или перегрузка |
angarabase_query_exec_duration_ms_bucket | histogram | Latency distribution | P99 < 100ms | P99 > 500ms = деградация |
angarabase_slow_query_total | counter | Slow queries (> threshold) | 0 | > 0 = нужен EXPLAIN slow queries |
angarabase_sql_routing_not_supported_total | counter | Unsupported SQL routes | 0 | > 0 = приложение использует неподдерживаемый SQL |
angarabase_legacy_fallback_triggered_total | counter | Legacy path fallbacks | 0 | > 0 = unsupported query план |
angarabase_simd_agg_fallback_total | counter | Fallback SIMD агрегации на скалярный путь | 0 | > 0 = отсутствие поддержки AVX2/NEON или несовместимость типов |
angarabase_adaptive_probe_swap_total | counter | Количество адаптивных переключений сторон 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_bytes | gauge | RSS процесса (байт) | < soft_limit * 0.9 | OOM risk; проверить query patterns |
angarabase_memory_soft_limit_exceeded_total | counter | Превышений soft_limit_mb | 0 | > 0 = память под давлением |
angarabase_tx_overlay_dataset_bytes_total | gauge | In-memory tx overlay size | < 512 МБ | Большие txn держат много данных в памяти |
QoS Scheduler
| Метрика | Тип | Что измеряет | Норма | Выход за границу |
|---|---|---|---|---|
angarabase_qos_rejected_critical_total | counter | Отказов CRITICAL queue | 0 | Incident candidate — немедленный triage |
angarabase_qos_rejected_interactive_total | counter | Отказов INTERACTIVE queue | 0 | User-facing degradation |
angarabase_qos_rejected_background_total | counter | Отказов BACKGROUND queue | — | Снизить background concurrency |
angarabase_qos_blocking_inflight | gauge | Блокирующих задач | < max_blocking | scheduler saturation |
angarabase_spawn_blocking_active | gauge | Активных 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_bytes | gauge | Resident Set Size процесса сервера в байтах. Обновляется каждые 5с. |
angarabase_memory_soft_limit_exceeded_total | counter | Количество пересечений порога soft_limit_mb (edge-trigger). |
angarabase_buffer_pool_warmup_evictions_during_warmup_total | counter | Количество вытеснений страниц из buffer pool во время прогрева (warmup cap enforcement). |
angarabase_buffer_pool_warmup_completed_pages | counter | Количество страниц, загруженных при прогреве. |
angarabase_buffer_pool_warmup_aborted_at_cap_total | counter | Warmup прерван из-за превышения 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_total | counter | Общее число выполненных чекпоинтов. > 0 после 5 мин uptime подтверждает работу auto-checkpoint. |
Visibility Map and Index-Only Scan (RM-0.6.4.3)
| Метрика | Тип | Смысл |
|---|---|---|
angarabase_visibility_map_all_visible_fraction | gauge | Доля all-visible страниц (сигнал для планировщика). |
angarabase_index_only_scan_hits_total | counter | Успешные Index-Only Scan (без обращения к Heap). |
angarabase_index_only_scan_heap_fetches_total | counter | Fallback на Heap при Index-Only Scan (бит VM=0). |
angarabase_visibility_map_rebuild_pages_remaining | gauge | Остаток страниц для фонового восстановления VM. |
angarabase_visibility_map_corrupt_total | counter | Обнаруженные повреждения 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_total | counter | Число commit-wait событий по пути IO::WalSync (строгая durability). |
angarabase_wal_group_commit_wait_total | counter | Число 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_total | counter | Fallback stream-плана на legacy executor. |
angarabase_vector_fallback_total | counter | Fallback vector-пути на row-путь (неподдерживаемый план или ошибка типа). |
angarabase_vector_columnar_native_total | counter | Успешные активации нативного векторного пути для columnar таблиц. |
angarabase_columnar_batched_scan_batches_total | counter | Всего обработанных колоночных батчей в нативном пути. |
angarabase_columnar_segments_pruned_total | counter | Количество сегментов, отсеченных по метаданным (zone-map pruning). |
angarabase_parallel_agg_total | counter | Количество запусков параллельного агрегатора. |
angarabase_vector_memory_budget_exceeded_total | counter | Отказ выделения бюджета вектора (SQLSTATE 53100). |
angarabase_columnar_manifest_init_failed_total | counter | Ошибка init SegmentManifest при CREATE TABLE USING COLUMNAR. |
angarabase_vector_numeric_float_backed_total | counter | Lossy-mapping: numeric(p,s>0) → Float64 в vector-пути (RM-0.6.7.15). Ненулевое = float-потеря точности. Подробнее: vector-numeric-columnar-agg-metrics.md. |
angarabase_vector_columnar_grouped_agg_total | counter | GROUP 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_rows | gauge (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 indexangarabase_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_total | counter | Всего задач поставлено в QoS CRITICAL queue. |
angarabase_qos_queued_interactive_total | counter | Всего задач поставлено в QoS INTERACTIVE queue. |
angarabase_qos_queued_background_total | counter | Всего задач поставлено в QoS BACKGROUND queue. |
angarabase_qos_rejected_critical_total | counter | Отказы CRITICAL queue с SQLSTATE 53600. |
angarabase_qos_rejected_interactive_total | counter | Отказы INTERACTIVE queue с SQLSTATE 53600. |
angarabase_qos_rejected_background_total | counter | Отказы BACKGROUND queue с SQLSTATE 53600. |
angarabase_qos_blocking_inflight | gauge | Текущие blocking tasks across QoS shards. |
angarabase_spawn_blocking_max | gauge | Лимит spawn_blocking threads из настройки max_blocking_threads; 0 до startup init. |
angarabase_spawn_blocking_active | gauge | Активные 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_blockingwait 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.rsprometheus_export_contains_must_have_metrics_names
Дальше
- Performance tuning guide — какие метрики читать в первую очередь при деградации.
- Parallel runtime observability runbook — узкоспецифичные метрики параллельного рантайма.
- MVCC and GC operator minimum — отдельный пакет MVCC/GC-метрик и алертов.
Materialized View Metrics
| Metric | Type | Description |
|---|---|---|
angarabase_mv_refresh_total | counter | Total number of materialized view refreshes. Labels: {mode, status}. |
angarabase_mv_refresh_duration_ms | histogram | Duration of materialized view refresh operations. Labels: {mode}. |
angarabase_mv_auto_refresh_scheduled_total | counter | Number of automatically triggered (scheduled) refreshes. |
angarabase_mv_auto_refresh_lag_seconds | gauge | Lag between the scheduled refresh time and actual refresh time. Labels: {mv}. |
angarabase_mv_incremental_refresh_rows_applied_total | counter | Number of rows applied during incremental (async) refreshes. Labels: {mv_name}. |
Online DDL Metrics
| Metric | Type | Description |
|---|---|---|
angarabase_online_ddl_operations_total | counter | Total number of Online DDL operations initiated. Labels: {op, status}. |
angarabase_online_ddl_copy_rows_total | counter | Total number of rows copied during the ghost-table phase. Labels: {table}. |
angarabase_online_ddl_cutover_duration_ms | histogram | Duration of the final cutover phase (blocking). |
Метрики статистики (RM-0.6.7.2)
| Метрика | Тип | Описание |
|---|---|---|
angarabase_stats_inline_updates_total | counter | Число inline-обновлений row_count_live на COMMIT. Ненулевое при активных DML транзакциях. |
angarabase_stats_async_recalc_active | gauge | 1 когда фоновый воркер активно выполняет гистограммный пересчёт, 0 — простой. |
angarabase_stats_drift_ratio | gauge | Коэффициент дрейфа статистики (0–1000, масштабировано). Растёт при большом числе DML без ANALYZE. |
angarabase_optimizer_drift_fallback_total | counter | Число планов где HashJoin был пропущен из-за Snapshot Age Dampening (RFC-2026-196 §4). |