use_adaptive_write_buffer_for_dynamic_subcolumns
use_async_block_ids_cache
use_compact_variant_discriminators_serialization
use_const_adaptive_granularity
index_granularity_bytes が 0 以外の場合) では、
granule のバイト単位のサイズが一定に保たれるため、行数は変動します。書き込まれる各
block について、granule あたりの行数は index_granularity_bytes をその
block 内の行の平均サイズで割った値となり、上限は index_granularity です。granule ごとに行数が異なるため、
パーツ内の各 granule の行数をそれぞれ 8 バイトとしてメモリに保持する必要があり、大規模なテーブルでは合計で数十 GB に達します。
定数のアダプティブ粒度 (この設定) を有効にすると、代わりに granule あたりの行数が一定に保たれるため、
バイト単位のサイズは変動します。この行数は、書き込まれるパーツ内の行の平均サイズから一度だけ
計算され、パーツには granule ごとに 1 つの値ではなく、
この単一の値が保存されます。すべての granule に同じ数の行が含まれるため、
granule ごとの追加の行数を保存する必要はありません。
現在これらの値に使用されているメモリ量は、
system.asynchronous_metrics の TotalIndexGranularityBytesInMemory メトリクスで報告され、
パーツごとには system.parts.index_granularity_bytes_in_memory で確認できます。
この設定は、変更後に書き込まれたパーツにのみ適用されます。
既存のパーツに適用するには、
ALTER TABLE … REWRITE PARTS
を使用してください。Compact パーツでは常にアダプティブ粒度が使用されます。