# TSDB Technical Specifications

## Scope

Embedded time-series storage in SQLite for ProxySQL runtime metrics and backend probe health.

## Table Definitions

### `tsdb_metrics`

- Columns: `timestamp`, `metric_name`, `labels`, `value`
- PK: `(timestamp, metric_name, labels)`
- `labels` is JSON text, default `'{}'`

### `tsdb_metrics_hour`

- Columns: `bucket`, `metric_name`, `labels`, `avg_value`, `max_value`, `min_value`, `count`
- PK: `(bucket, metric_name, labels)`

### `tsdb_backend_health`

- Columns: `timestamp`, `hostgroup`, `hostname`, `port`, `probe_up`, `connect_ms`
- PK: `(timestamp, hostgroup, hostname, port)`

## Sampling and Rollup

- Sampler interval: `tsdb-sample_interval`
- Rollup interval: hourly
- Rollup SQL: `INSERT OR REPLACE ... GROUP BY bucket, metric_name, labels`

## Retention

- Raw metrics retention: `tsdb-retention_days`
- Backend probe retention: `tsdb-retention_days`
- Hourly rollup retention: 365 days

## Variable Semantics

- All TSDB variables are prefixed with `tsdb-`.
- Managed via `SET` commands and the dedicated command set:
  - `LOAD TSDB VARIABLES TO RUNTIME`
  - `SAVE TSDB VARIABLES TO DISK`
  - `SHOW TSDB VARIABLES`
  
  ## Current API Surface
  
  - C++ methods in `ProxySQL_Statistics` for insert, query, status, sampler/monitor loops.
  - SQL querying through `stats_history.tsdb_*` tables.
  - REST API endpoints:
    - `/api/tsdb/metrics`
    - `/api/tsdb/query`
    - `/api/tsdb/status`- Web Dashboard at `/tsdb`.
