これらの設定は system.merge_tree_settings で確認でき、ClickHouse のソースコードから自動生成されています。
max_bytes_to_merge_at_max_space_in_pool
利用可能なリソースが十分にある場合に、複数のパーツを 1 つのパーツにマージする際の、合計サイズ (バイト単位) の上限です。これは、自動バックグラウンドマージによって作成されるパーツの最大サイズにおおよそ相当します。 (0 はマージが無効になることを意味します)
設定可能な値:
- 0 以上の任意の整数。
マージスケジューラは定期的にパーティション内のパーツのサイズと数を分析し、プールに十分な空きリソースがあれば、バックグラウンドマージを開始します。マージは、ソースパーツの合計サイズが max_bytes_to_merge_at_max_space_in_pool より大きくなるまで実行されます。
OPTIMIZE FINAL によって開始されたマージでは、max_bytes_to_merge_at_max_space_in_pool は無視されます (考慮されるのは空きディスク容量のみです) 。
max_bytes_to_merge_at_min_space_in_pool
バックグラウンドプールで利用可能なリソースが最小限のときに、 複数のパーツを1つのパーツへマージする際の合計パーツサイズ (バイト単位) の最大値です。
設定可能な値:
- 任意の正の整数。
max_bytes_to_merge_at_min_space_in_pool は、
利用可能なディスク領域 (プール内) が不足している場合でもマージできる
パーツの合計サイズの上限を定義します。
これは、小さなパーツの数を減らし、
パーツが多すぎる エラーが発生する可能性を下げるために必要です。
マージでは、マージ対象パーツの合計サイズの2倍のディスク領域が予約されます。
そのため、ディスクの空き領域が少ない場合、
空き領域自体はあっても、その領域が進行中の大規模なマージですでに予約されているため、
ほかのマージを開始できず、insert のたびに小さなパーツが増えていく状況が発生することがあります。