Config Schema
Операторская сводка по поверхности конфигурации AngaraBase.
Каноничный источник: этот runbook в angarabook/src/operations/.
Goal
Зафиксировать контракт конфига:
- ключи и секции;
- дефолты;
- precedence и совместимость.
Core sections
[server]:addr(основной bind endpoint),host/portкак deprecated.[storage]:data_directory,transaction_log_directory(wal_directoryкак alias),io_backend_strict.[logging]:log_level,log_directory.[transaction_log]:backend,durability,fsync,checkpoint_target_lsn_lag_mb,checkpoint_min_interval_s.[ops]:metrics_addr,admin_addr.[security]:allow_insecure,dev_mode, TDE metadata fields.[memory]:soft_limit_mb,hard_limit_mb,max_dataset_bytes.[wal]:max_size_mb, performance and observability knobs.[execution],[aqp],[diagnostics],[optimizer]: performance and observability knobs.
Config Strictness and Unknown Keys (RM-0.6.5.6)
Начиная с RM-0.6.5.6, наличие неизвестных ключей в именованных секциях ([server], [storage], [wal] и др.) приводит к FATAL ERROR при старте сервера. Это предотвращает опечатки в конфигурации, которые раньше могли игнорироваться.
- При ошибке сервер выводит подсказку (Levenshtein suggestion) для наиболее похожего существующего ключа.
Пример ошибки при опечатке в ключе:
[ERROR] config: unknown key 'max_siz_mb' in section [wal]; did you mean 'max_size_mb'?
Диагностика: если сервер не стартует — проверить stderr / wrapper.log:
grep -i "unknown key\|config:" artifacts/golden_db/logs/wrapper.log | tail -20
WAL and Checkpoint Tuning (RM-0.6.5.8)
-
[wal] max_size_mb: Максимальный размер сегментов WAL. Применяется с RM-0.6.5.6 (ранее игнорировался).- Default: 512
- ENV:
ANGARABASE_WAL_MAX_SIZE_MB - Startup log:
wal: max_size_mb=2048 MiB (source=config)
-
[transaction_log] checkpoint_target_lsn_lag_mb: Целевое отставание LSN для триггера чекпоинта.- Default: 256
- ENV:
ANGARABASE_CHECKPOINT_LSN_LAG_TRIGGER_MB - Startup log:
checkpoint: lsn_lag_trigger_mb=256
-
[transaction_log] checkpoint_min_interval_s: Минимальный интервал между чекпоинтами в секундах.- Default: 300
- ENV:
ANGARABASE_CHECKPOINT_INTERVAL_MS(задается в миллисекундах для ENV)
-
[storage] io_backend_strict(default: false): Строгий режим проверки I/O бэкенда. -
ANGARABASE_CHECKPOINT_BACKGROUND=true: Фоновый чекпоинт теперь включен по умолчанию.
Проверка применения max_size_mb при старте:
grep "wal: max_size_mb" artifacts/golden_db/logs/wrapper.log | tail -3
# Ожидаемый вывод: [INFO] wal: max_size_mb=512 MiB (source=config)
Memory Limits (RM-0.6.5.8)
Секция [memory] управляет потреблением оперативной памяти процессом сервера.
-
soft_limit_mb: Порог RSS (Resident Set Size) в MiB, при котором сервер начинает выдавать предупреждения (warn threshold).- Default: disabled (если не задан)
- Поведение: при пересечении лимита инкрементируется метрика
angarabase_memory_soft_limit_exceeded_total. - Пример:
soft_limit_mb = 4096
-
hard_limit_mb: Жесткий предел RSS в MiB.- Default: disabled (если не задан)
- Поведение: при превышении лимита сервер выполняет экстренный сброс данных (emergency flush) и завершается с
exit(1). - Пример:
hard_limit_mb = 8192
Index Maintenance and Durability (RM-0.6.5.8)
-
Index Durability: Начиная с RM-0.6.5.8, операция
CREATE INDEXгарантирует долговечность (durability). После завершения команды индекс полностью синхронизирован и доступен после восстановления (recovery) даже в случае сбоя сразу после создания. -
storage.max_index_pages_per_table(default: 65535): лимит страниц на один индекс. -
storage.index_maintenance_budget_ms(default: 5000): бюджет времени на поддержку индексов в одной DML команде. -
visibility_map.rebuild_max_pages_per_tick(default: 1024): темп фонового восстановления VM. -
visibility_map.rebuild_io_budget_bytes(default: 10MB): I/O бюджет воркера VM.
Init behavior (--init)
angarabase-server --init использует effective settings и формирует bootstrap layout:
<root>/data<root>/txlog<root>/angarabase.conf(если не задан существующий config path)
Precedence
Правило приоритета:
- default
- config (
angarabase.conf) - environment override
Контракт: default -> config -> env.
Critical env surface (operator minimum)
ANGARABASE_TRANSACTION_LOG*(backend/durability/fsync)ANGARABASE_METRICS_ADDRANGARABASE_TDE_*ANGARABASE_TLS_*ANGARABASE_MAX_DATASET_BYTESANGARABASE_AQP_*ANGARABASE_GC_*
Backward compatibility policy
Breaking считается:
- переименование ключа без alias периода;
- unsafe изменение дефолта (например bind наружу);
- смена семантики без migration notes.
Не-breaking:
- новые ключи с безопасными дефолтами;
- новые fail-closed проверки unsafe комбинаций с явным override.
Spill / Temp Storage (RM-0.6.4.2 — Spill to Disk)
Новые ENV knobs для управления spill-to-disk (Grace Hash Join, External Merge Sort, Set Ops) при превышении QueryMemoryBudget. Default disabled (безопасный fail-closed на OOM 53100).
Core spill knobs:
ANGARABASE_QUERY_SPILL_ENABLED=0— включить spill path (set=1 for analytical workloads).ANGARABASE_TEMP_MAX_BYTES_PER_QUERY(unlimited) — per-query soft quota.ANGARABASE_TEMP_MAX_BYTES_TOTAL_*(SOFT/HARD) — global spill limits, fail-closed on hard.ANGARABASE_TEMP_DIRECT_IO=0,ANGARABASE_TEMP_USE_O_TMPFILE=0,ANGARABASE_TEMP_OTMPFILE_DIRECT_FALLBACK=0— io_uring + O_DIRECT + O_TMPFILE profile (production-like, kernel-managed cleanup on crash).ANGARABASE_SPILL_HASH_JOIN_*(MAX_PARTITION_ROWS=8192, MAX_RECURSION_DEPTH=3, SKEW_THRESHOLD=75%, BLOOM_BITS=65536) — tuning recursion, skew handling, prefilter. Overflow → SQLSTATE 53400 graceful refusal.
Monitoring: see observability-metrics.md for angarabase_spill_*, angarabase_wal_* counters and
sys.wait_events.
See RM-0.6.4.2 Surface Map and RFC-2026-492 for full contract. Recommended for HTAP/TPC-H with low
ANGARABASE_QUERY_MEMORY_LIMIT_MB.
Дальше
- Operations overview — где config-schema встроен в общий operator-материал.
- Operational policies baseline — какие конфигурационные значения зафиксированы политикой.
GC Tuning (RM-0.6.6.11)
Columnar Manifest GC
ANGARABASE_COLUMNAR_MANIFEST_GC_INTERVAL_MS(config key:columnar.manifest_gc_interval_ms): Интервал между запусками фонового ManifestGC worker, который удаляет «ghost» ссылки на сегменты, отсутствующие в BlobStore.- Default:
60000(60 секунд) - Рекомендуемый диапазон: 10000–300000
- Мониторинг:
angarabase_columnar_manifest_gc_removed_total— количество убранных ghost-ссылок;angarabase_catalog_snapshot_segments_total— текущий размер snapshot (индикатор роста манифеста). - Когда уменьшать: если
angarabase_catalog_snapshot_segments_totalстабильно растёт при неизменной нагрузке, аrate(angarabase_columnar_manifest_gc_removed_total[5m])близко к нулю — GC не успевает; уменьши интервал.
- Default:
Index GC Sweep Limit
ANGARABASE_INDEX_GC_MAX_SWEEP_PAGES(config key:storage.index_gc_max_sweep_pages): Максимальное число страниц B-tree, просматриваемых за один sweep IndexGC worker. Ограничивает I/O нагрузку GC на горячих индексах.- Default:
3000 - Рекомендуемый диапазон: 500–10000
- State-based trigger: если
angarabase_index_gc_dead_fraction > 0.15, worker автоматически выполняет внеплановый sweep независимо от таймера. - Мониторинг:
angarabase_index_gc_dead_fraction— текущая доля мёртвых записей (gauge, 0–1). Значение выше 0.20 требует attention.
- Default:
Buffer Pool Config (RM-0.6.6.8)
В RM-0.6.6.8 были добавлены настройки для управления политикой вытеснения страниц и изоляции ресурсов для GC.
ANGARABASE_BUFFER_POOL_EVICTION: Выбор алгоритма вытеснения страниц.- Default:
"2q" - Values:
"2q","3q"(включает полную политику 3Q с разделением на A1/Am очереди).
- Default:
ANGARABASE_BUFFER_POOL_GC_RING_SIZE: Размер кольцевого буфера для операций GC (в страницах).- Default: 256
- Описание: Позволяет изолировать I/O нагрузку от фоновой очистки индексов, предотвращая вымывание полезных данных из основного кэша.