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

Метрики vector-пути: NUMERIC float-backed и columnar grouped-agg

Две operator-facing counter-метрики, добавленные в 0.6.7.15 (vector batch foundation). Обе — кумулятивные counter (Prometheus), сбрасываются только при рестарте процесса.

curl -sf http://127.0.0.1:9898/metrics | grep -E "vector_numeric_float_backed|vector_columnar_grouped_agg"
МетрикаТипСмысл
angarabase_vector_numeric_float_backed_totalcounterLegacy-сигнал старого lossy float-backed numeric-пути. С 0.6.7.16 всегда 0 (numeric теперь exact Decimal, см. ниже).
angarabase_vector_columnar_grouped_agg_totalcounterКоличество раз, когда GROUP BY-агрегат был выполнен колоночным hash-agg путём (а не через row-fallback). Path-signal.

angarabase_vector_numeric_float_backed_total

Что значит. Это legacy-сигнал. В версиях до 0.6.7.16 numeric(p,s>0) / decimal(p,s>0) на vector-пути проецировались в физический Float64 (lossy — риск потери точности в SUM/AVG над денежными колонками).

Начиная с 0.6.7.16 этот lossy-путь убран: появился точный Decimal (NUMERIC/DECIMAL Phase 0), и numeric на vector-пути теперь делает row-fallback к точному Decimal, а не лоссит во Float64. Поэтому счётчик постоянно 0 — метрика сохранена для обратной совместимости дашбордов.

Для точности денежных вычислений отдельных обходных путей больше не нужно — используйте обычный NUMERIC(p,s). Контроль точного decimal — метрики angarabase_decimal_overflow_total, angarabase_decimal_legacy_floatread_total (см. Тип NUMERIC/DECIMAL).


angarabase_vector_columnar_grouped_agg_total

Что значит. Path-signal: GROUP BY-агрегат прошёл оптимизированным колоночным hash-agg путём (без построчной материализации to_rows() и без string-кодирования ключа группы). Покрывает два места:

  • vector-операторный путь (VectorAggV0 — composite key прямо из ColumnData);
  • columnar SIMD-путь над HtapRowColumn-таблицами (S3).

Когда инкрементируется. Один раз на завершённый вызов колоночного grouped-agg, когда:

  • в плане есть GROUP BY (непустой ключ группы);
  • все aggregate-specs поддержаны колоночным путём (COUNT/SUM/MIN/MAX, поддержанные типы ключа);
  • (для S3) таблица — columnar-tier (ENGINE=htap_row_column).

Когда НЕ инкрементируется (запрос ушёл в row-fallback):

  • неподдержанный паттерн (DISTINCT, нестандартный/выражение-ключ);
  • ungrouped-агрегат (нет GROUP BY) — там путь иной;
  • row-store таблица не достигает columnar S3-пути (авто-тиринг = v0.7, 0.7.7.1).

Эквивалентность результата колоночного пути row-fallback подтверждена AC-тестами 0.6.7.15 (S2-G2 / S3-G3). Метрика — наблюдаемость пути, не корректности.

PromQL: доля columnar-пути vs row-fallback

# Columnar grouped-agg активаций за 5 минут.
increase(angarabase_vector_columnar_grouped_agg_total[5m])

# Доля columnar-пути от всех vector-fallback'ов (грубый индикатор «насколько часто
# GROUP BY уходит в медленный row-fallback»).
increase(angarabase_vector_columnar_grouped_agg_total[5m])
  /
clamp_min(
  increase(angarabase_vector_columnar_grouped_agg_total[5m])
    + increase(angarabase_vector_fallback_total[5m]),
  1
)

Troubleshooting (DBA)

  • Счётчик не растёт на HtapRowColumn-таблице при GROUP BY-нагрузке → запрос уходит в row-fallback. Проверьте: нет ли DISTINCT, выражения в ключе группировки, неподдержанной агрегатной функции; всё ли — columnar-eligible specs. Row-fallback корректен, но медленнее.
  • Счётчик растёт, а ожидалась SIMD-агрегация — это норма: grouped-agg ходит hash-group путём, а «чистый» SIMD-kernel применяется только для ungrouped COUNT/SUM/MIN/MAX.
  • Сопоставляйте с angarabase_vector_fallback_total и angarabase_parallel_agg_total для полной картины маршрутизации vector-пути.

Связанные метрики

См. раздел HTAP / Vector Execution Metrics общего справочника (angarabase_vector_fallback_total, angarabase_vector_columnar_native_total, angarabase_parallel_agg_total).