Optimize Final を避ける
OPTIMIZE TABLE ... FINAL
クエリを使用すると、特定のテーブルのデータパーツを未予定のマージにより一つのデータパーツに統合します。このプロセス中に、ClickHouse は以下のステップを実行します:
- データパーツを読み込みます。
- パーツが解凍されます。
- パーツがマージされます。
- それらは一つのパーツに圧縮されます。
- そのパーツがオブジェクトストアに書き戻されます。
上記の操作はリソースを多く消費し、CPU とディスク I/O に significant な負荷をかけます。この最適化を使用することは、既に一つのパーツへのマージが行われていても、パーツの再書き込みを強制することに注意することが重要です。
さらに、OPTIMIZE TABLE ... FINAL
クエリを使用すると、ClickHouse が通常バックグラウンドで自動的にマージするパーツの最大サイズを制御する設定 max_bytes_to_merge_at_max_space_in_pool
を無視する場合があります。
max_bytes_to_merge_at_max_space_in_pool
設定はデフォルトで 150 GB に設定されています。OPTIMIZE TABLE ... FINAL
を実行すると、上記の手順が実行され、マージ後に一つのパーツが残ります。この残りの一つのパーツは、この設定のデフォルトで指定された 150 GB を超える可能性があります。これは、あなたがこのステートメントの使用を避けるべき理由の一つであり、大きな 150 GB のパーツを一つのパーツにマージすることは、 significant な時間および/またはメモリを必要とする可能性があります。