ストレージが10倍に膨らむアンチパターン
GROUP BY で減らせる以上に多くの行を作っているなら、それは materialized view ではなく、高コストな索引を作っているだけです。
本番環境の materialized view の健全性検証
- 低い集約率 (<10%) = 良い MV、大幅な圧縮
- 高い集約率 (>70%) = 悪い MV、ストレージ肥大化のリスク
- ストレージ倍率 = MV のサイズがどれだけ大きく/小さくなるか
materialized viewが問題になる場合
- insertのレイテンシが増加する (10msで完了していたクエリが100ms以上かかるようになる)
- “パーツが多すぎる” エラーの発生頻度が高くなる
- insert処理中にCPUスパイクが発生する
- 以前は発生していなかったinsertのタイムアウトが起きる
system.query_log を使ってクエリ実行時間の傾向を追跡すると、MV追加前後のinsertパフォーマンスを比較できます。
ビデオの出典
- ClickHouse at CommonRoom - Kirill Sapchuk - 「materialized view への過度な熱意」と「20GB→190GBへの爆発的増加」の事例の出典