- パーツタイプ (Wide vs Compact): パーツ内でカラムデータをどのように保存するか
- ストレージフォーマット (Full vs Packed): パーツのファイルをディスク上でどのように保存するか
パーツの種類: wide パーツ vs compact パーツ
各タイプの使い分け
min_bytes_for_wide_part: パーツがwide パーツを使用するために必要な最小バイト数min_rows_for_wide_part: パーツがwide パーツを使用するために必要な最小行数
compact パーツ 形式で保存されます。そうでない場合は、wide パーツ 形式が使用されます。
パフォーマンスに関する考慮事項
- より高いインジェスト性能
- クエリで全カラムが必要な場合に最適
- 小さなパーツでより効率的
- クエリでカラムの一部だけを選択する場合により効率的
- 必要なカラムだけを選択的に参照する大規模なデータセットに適している
min_bytes_for_wide_part=0 を設定できます。
これは、次のようなシナリオで役立つ場合があります。
- 多数のカラム (たとえば 600 カラム超) を持つテーブルがあり、大量の insert を行っている場合、これを 0 に設定するとパフォーマンスの向上に役立つことがあります
system.metric_logやsystem.text_logのように、マージ中に過剰なメモリを消費しているシステムテーブルのメモリ使用量を最適化したい場合- insert 量の多いテーブルを扱っていて、ストレージとマージ動作を最適化したい場合
- パーツフォーマットの動作を一貫させたい場合や、サイズしきい値に基づくフォーマット切り替えのオーバーヘッドを避けたい場合
制限事項
system.parts_columns をクエリすると、compact パーツでは column_data_compressed_bytes と column_data_uncompressed_bytes に 0 が表示されます。詳細については、「wide パーツまたは compact パーツの数とサイズを調べる」 を参照してください。
ストレージフォーマット: Full と Packed
Full storage
Packed ストレージ
- S3/オブジェクトストレージ API 呼び出しの削減
- 協調サービスへのメタデータ負荷の軽減
- ストレージコストの削減 (Full ストレージは大幅に高額になる場合があります)
- リモートストレージ上の小さなパーツでパフォーマンスが向上
Packed ストレージ が使用される条件
- 非圧縮バイト数 <
min_bytes_for_full_part_storage - 行数 <
min_rows_for_full_part_storage - マージレベル <
min_level_for_full_part_storage
0 のため、いずれかの値を引き上げない限り、パーツは Full storage を使用します。
ダウングレード互換性一度 Packed ストレージ でパーツが書き込まれると、Packed ストレージ をサポートしていない ClickHouse バージョンでは、そのパーツを読み取れなくなります。そのため、Packed ストレージ を有効にすると、そのようなバージョンへのダウングレードはできなくなります。ロールバックが不要であると確信できる場合にのみ有効にしてください。
min_level_for_full_part_storage 設定は、特に継続的に挿入が発生するテーブルにおいて、オブジェクトストレージ上でパフォーマンスとコストの両方を最適化するために使用できます。
この設定は ClickHouse バージョン 25.10 から利用可能で、min_level_for_wide_part と組み合わせて機能し、パーツストレージ戦略を包括的に制御できます。
デフォルト値 (0) からの変更は、次のようなユースケースで検討できます。
- テーブルで定常的にデータインジェストが発生する場合、初期パーツはすぐにマージされてなくなるため、最初からフルパーツ形式で保存するのは無駄になります
- このパラメータを設定すると、挿入時にコストの高い S3 PUT リクエストが発生するのを抑えられます。たとえば、ある分析では、フルパーツを作成する挿入操作では 1 回の挿入あたり平均 31.3 回の PUT リクエストが発生したのに対し、packed パーツのみを作成する場合は 1 回の挿入あたり平均 2.22 回にとどまりました
- Packed ストレージ では各カラムごとに個別のファイルを作成せず、すべてのデータを 1 つのファイルに書き込むため、特にカラム数の多いテーブルでは挿入操作が高速になります。
min_level_for_full_part_storage = 2 を設定してください。
これにより、次のことが保証されます。
- レベル 0 のパーツ (初回の挿入) は Packed ストレージ を使用する
- レベル 1 のパーツも引き続き Packed ストレージ を使用する
- レベル 2 以上のパーツのみがフルストレージ形式を使用する
パーツの種類とストレージフォーマットの組み合わせ
パーツ情報の確認
system.partsテーブルを使用して確認できます。