# Prometheus TSDB
## 定義
Prometheus に内蔵された時系列ストレージエンジン。時系列データを効率的に収集・圧縮・クエリするために設計されている。HEAD(インメモリ)とディスクブロックの 2 層構造をとる。
(Source: [[@2026__SREcon26Americas__Unlock High-Frequency Deployments without Blowing Up Prometheus]])
### ストレージ構造
```
RAM: [HEAD (アクティブ時系列の最新チャンク)]
Disk: [WAL] [M-map chunks] [Block 1] [Block 2] ... [Block N]
```
- **HEAD**: スクレイプされた最新データを保持するインメモリバッファ。デフォルト 2 時間分の保持後にディスクへ flush
- **WAL (Write-Ahead Log)**: HEAD への書き込みを先行ログに記録してクラッシュ耐性を確保
- **M-map chunks**: HEAD の古いチャンクをメモリマップしてディスクに配置(メモリ節約)
- **Block**: 一定期間のデータをイミュータブルなディレクトリ形式で保持
### 時系列の識別
時系列 = ラベルセット(文字列のキーバリューペア集合)でユニークに識別される。
```
http_requests_total{job="nginx", instance="1.2.3.4:80", status="200"} 28
```
ラベルセットが 1 つでも異なれば別の時系列として記録される。これがシリーズチャーン問題の根本原因。
### カウンタの累積セマンティクスとレプリカ分離
カウンタ型の値は増加のみ、または 0 へのリセットのみを許す累積値として保存される。ラベルセット(pod など)でレプリカごとに系列が分離されるのは、この累積セマンティクスと表裏一体である。累積値は状態を持つため、複数レプリカの値を単純合算すると reset を跨いだ際に破綻する。
```
http_client_requests_total 10 14 (reset) 5 8
# 正しい delta: +10 +4 (reset) +5 +3 = 22
```
(Source: [[@2026__RedditEng__Materialized Metrics in Prometheus]])
## 横断的知見
- [[@2026__SREcon26Americas__Unlock High-Frequency Deployments without Blowing Up Prometheus]] はラベルセットによる系列分離が HEAD のメモリ圧迫(失活系列の滞留)を引き起こす点を扱うのに対し、[[@2026__RedditEng__Materialized Metrics in Prometheus]] はラベルセットによる系列分離がカウンタの**合算不能性**(累積値は状態を持つため単純合算できない)を引き起こす点を扱う。同じ「ラベルセット=系列識別」という TSDB の基本モデルから、ストレージ側(メモリ)とクエリ側(集約)という2種類の異なる副作用が生じることが分かる(Source: [[@2026__SREcon26Americas__Unlock High-Frequency Deployments without Blowing Up Prometheus]], [[@2026__RedditEng__Materialized Metrics in Prometheus]])。
## 未解決の問い
- HEAD flush を 2 時間に固定している設計上の理由・歴史的経緯は何か
- [[VictoriaMetrics]] や [[Mimir]] との内部アーキテクチャの差異はどこにあるか
- カウンタの累積セマンティクスを TSDB レベルで delta ネイティブに変更する設計(OpenTelemetry の delta temporality のような)は Prometheus 本体で検討されたことがあるか
## 関連
- [[Prometheus]] / [[Prometheusシリーズチャーン]] / [[マテリアライズドメトリクス]]
- [[@2026__SREcon26Americas__Unlock High-Frequency Deployments without Blowing Up Prometheus]]
- [[@2026__RedditEng__Materialized Metrics in Prometheus]]
## 出典
- [[@2026__SREcon26Americas__Unlock High-Frequency Deployments without Blowing Up Prometheus]]
- [[@2026__RedditEng__Materialized Metrics in Prometheus]]