Materialized views: how they can become a double edged sword
このガイドは、コミュニティミートアップから得られた知見のコレクションの一部です。現実的なソリューションと洞察については、特定の問題でブラウズすることができます。 データベースのパーツが多すぎて困っていますか? パーツが多すぎるコミュニティの洞察ガイドをチェックしてください。 より詳細な情報は、Materialized Viewsをご覧ください。
The 10x storage anti-pattern
実際のプロダクション問題: 「マテリアライズド ビューがありました。生のログテーブルは約20ギガですが、そのログテーブルからのビューは190ギガに膨れ上がり、生のテーブルのサイズの10倍近くになりました。これは、属性ごとに1行を作成していて、各ログには10の属性があるために発生しました。」
ルール: GROUP BY
が削除する行よりも多くの行を作成する場合、高価なインデックスを構築しているだけで、マテリアライズドビューを構築しているわけではありません。
Production materialized view health validation
このクエリは、マテリアライズド ビューを作成する前に、そのビューがデータを圧縮するか、膨張するかを予測するのに役立ちます。実際のテーブルとカラムに対して実行して、「190GBの爆発」を回避してください。
表示内容:
- 低い集約比 (<10%) = 良いMV、重要な圧縮
- 高い集約比 (>70%) = 悪いMV、ストレージ爆発のリスク
- ストレージ倍率 = MVがどれほど大きくまたは小さくなるか
When materialized views become a problem
監視する警告サイン:
- 挿入のレイテンシが増加(10msかかっていたクエリが現在は100ms以上かかる)
- 「パーツが多すぎる」エラーが頻繁に発生
- 挿入操作中のCPUスパイク
- 以前は発生しなかった挿入タイムアウト
system.query_log
を使用して、MVを追加する前後の挿入パフォーマンスを比較し、クエリの所要時間の傾向を追跡できます。
Video sources
- ClickHouse at CommonRoom - Kirill Sapchuk - 「マテリアライズドビューに過剰に熱心」および「20GB→190GBの爆発」ケーススタディの出典