Метрики 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_total | counter | Legacy-сигнал старого lossy float-backed numeric-пути. С 0.6.7.16 всегда 0 (numeric теперь exact Decimal, см. ниже). |
angarabase_vector_columnar_grouped_agg_total | counter | Количество раз, когда 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).