> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# その他の MergeTree テーブル設定

> 「Other」生成グループ内の ClickHouse MergeTree テーブル設定。

export const SettingsInfoBlock = ({type, default_value, changeable_without_restart}) => {
  return <div className="not-prose" style={{
    display: "flex",
    flexWrap: "wrap",
    alignItems: "baseline",
    columnGap: "0.5rem",
    rowGap: "0.125rem",
    margin: "0.375rem 0",
    fontSize: "0.8125rem",
    lineHeight: "1.125rem"
  }}>
      <div style={{
    fontWeight: 600,
    opacity: 0.72
  }}>型</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{type}</div>
      <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>デフォルト値</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{default_value}</div>
      {changeable_without_restart && <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>
          再起動せずに変更可能
        </div>}
      {changeable_without_restart && <div style={{
    overflowWrap: "anywhere"
  }}>
          {changeable_without_restart}
        </div>}
    </div>;
};

export const ExperimentalBadge = () => {
  return <div className="experimentalBadge">
            <div className="experimentalIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.25" d="M5.5 2H10.5" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M9.50015 2V6.19625L13.4283 12.7425C13.4738 12.8183 13.4985 12.9049 13.4996 12.9934C13.5008 13.0818 13.4785 13.169 13.435 13.246C13.3914 13.323 13.3283 13.3871 13.2519 13.4317C13.1755 13.4764 13.0886 13.4999 13.0002 13.5H3.00015C2.91164 13.5 2.8247 13.4766 2.74822 13.432C2.67174 13.3874 2.60847 13.3233 2.56487 13.2463C2.52126 13.1693 2.49889 13.082 2.50004 12.9935C2.50119 12.905 2.52582 12.8184 2.5714 12.7425L6.50015 6.19625V2" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M4.47656 9.56754C5.30344 9.41254 6.47656 9.47942 7.99969 10.25C10.0153 11.2707 11.4216 11.0569 12.2184 10.7282" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>
        </div>
            実験的な機能です。 <u><a href="/docs/docs/beta-and-experimental-features#experimental-features">詳細を見る。</a></u>
        </div>;
};

これらの設定は [system.merge\_tree\_settings](/docs/ja/reference/system-tables/merge_tree_settings) で確認でき、ClickHouse のソースコードから自動生成されています。

<div id="adaptive_write_buffer_initial_size">
  ## adaptive\_write\_buffer\_initial\_size
</div>

<SettingsInfoBlock type="NonZeroUInt64" default_value="16384" />

アダプティブ書き込みバッファの初期サイズ

<div id="add_implicit_sign_column_constraint_for_collapsing_engine">
  ## add\_implicit\_sign\_column\_constraint\_for\_collapsing\_engine
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

true に設定すると、CollapsingMergeTree または VersionedCollapsingMergeTree テーブルの `sign` カラムに暗黙的な制約が追加され、
有効な値 (`1` と `-1`) のみを許可します。

<div id="alter_column_secondary_index_mode">
  ## alter\_column\_secondary\_index\_mode
</div>

<SettingsInfoBlock type="AlterColumnSecondaryIndexMode" default_value="rebuild" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.12"},{"label": "rebuild"},{"label": "依存するセカンダリ索引がある場合でも `column` に対する ALTER を許可できるように動作を変更"}]}]} />

セカンダリ索引の対象になっているカラムを変更する `ALTER` コマンドを許可するかどうか、および
許可する場合にどのような処理を行うかを設定します。デフォルトでは、このような `ALTER` コマンドは許可され、索引は再構築されます。

設定可能な値:

* `rebuild` (default): `ALTER` コマンド内のカラムの影響を受けるセカンダリ索引を再構築します。
* `throw`: 例外を送出し、**明示的** なセカンダリ索引の対象になっているカラムに対する `ALTER` をすべて禁止します。暗黙的な索引はこの制限の対象外であり、再構築されます。
* `drop`: 依存するセカンダリ索引を削除します。新しいパーツにはその索引が含まれなくなるため、再作成するには `MATERIALIZE INDEX` が必要です。
* `compatibility`: 元の動作に合わせます。`ALTER ... MODIFY COLUMN` では `throw`、`ALTER ... UPDATE/DELETE` では `rebuild` になります。
* `ignore`: 熟練者向けです。索引を不整合な状態のままにするため、誤ったクエリ結果を招く可能性があります。

<div id="apply_patches_on_merge">
  ## apply\_patches\_on\_merge
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.5"},{"label": "1"},{"label": "新しい設定"}]}]} />

true の場合、マージ時にパッチパーツが適用されます

<div id="assign_part_uuids">
  ## assign\_part\_uuids
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

有効にすると、新しく作成される各パーツに一意の識別子が割り当てられます。
有効にする前に、すべてのレプリカが UUID バージョン 4 をサポートしていることを確認してください。

<div id="auto_statistics_types">
  ## auto\_statistics\_types
</div>

<SettingsInfoBlock type="String" default_value="basic, uniq_v2" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.7"},{"label": "basic, uniq_v2"},{"label": "デフォルトの自動統計で、`minmax` 統計タイプを非推奨とし、`basic`（`minmax` の上位互換）に置き換えました。また、INSERT 時およびメモリのオーバーヘッドを減らすため、`uniq` も `uniq_v2` に置き換えました"}]}, {"id": "row-2","items": [{"label": "26.4"},{"label": "minmax, uniq"},{"label": "デフォルトで自動統計を有効化"}]}, {"id": "row-3","items": [{"label": "25.10"},{"label": ""},{"label": "新しい設定"}]}]} />

適切なすべてのカラムに対して自動的に計算する統計タイプのカンマ区切りリストです。
サポートされている統計タイプ: basic, tdigest, countmin, uniq, uniq\_v2。
`minmax` 統計タイプは非推奨です。これは `basic` の部分集合であるため、代わりに `basic` を使用してください。

<div id="background_task_preferred_step_execution_time_ms">
  ## background\_task\_preferred\_step\_execution\_time\_ms
</div>

<SettingsInfoBlock type="Milliseconds" default_value="50" />

マージ または mutation の 1 ステップの実行に要する目標時間です。1 ステップの処理に
これより長い時間がかかる場合は、この時間を超えることがあります

<div id="clean_deleted_rows">
  ## clean\_deleted\_rows
</div>

<SettingsInfoBlock type="CleanDeletedRows" default_value="Never" />

廃止された設定で、効果はありません。

<div id="clone_replica_zookeeper_create_get_part_batch_size">
  ## clone\_replica\_zookeeper\_create\_get\_part\_batch\_size
</div>

<SettingsInfoBlock type="NonZeroUInt64" default_value="100" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.2"},{"label": "100"},{"label": "新しい設定"}]}]} />

レプリカのクローン時に ZooKeeper の multi-create get-part リクエストで使用するバッチサイズ。

<div id="compatibility_allow_sampling_expression_not_in_primary_key">
  ## compatibility\_allow\_sampling\_expression\_not\_in\_primary\_key
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

主キーに含まれない sampling expression を持つテーブルの作成を許可します。これは、
後方互換性のために、不正なテーブルを含む状態でサーバーを一時的に実行できるようにする場合にのみ
必要です。

<div id="compute_exact_num_defaults_for_sparse_columns">
  ## compute\_exact\_num\_defaults\_for\_sparse\_columns
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="Bool" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.7"},{"label": "0"},{"label": "スパース シリアライゼーション向けの、プルーニングおよび trivial-count リライトに必要なカラムごとの正確な num_defaults 計算を制御する新しい設定"}]}]} />

insert および
マージ 時に、スパース
シリアライゼーションを判断するための、より低コストな sampling による推定ではなく、
各カラムのデフォルト値数を正確に計算します。
これは、永続化された `num_defaults` カウンターを利用する
`optimize_trivial_count_with_sparsity_filter` で必要になります (Nullable カラムでは、
さらに `nullable_serialization_version = 'allow_sparse'` が必要です) 。
無効のままにしておけば inserts/merges の速度は従来どおり維持されますが、有効にすると
スパース化の対象となり得る各カラムごとに O(rows) の追加パスが発生します。

<div id="deduplicate_merge_projection_mode">
  ## deduplicate\_merge\_projection\_mode
</div>

<SettingsInfoBlock type="DeduplicateMergeProjectionMode" default_value="throw" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "24.8"},{"label": "throw"},{"label": "不整合なプロジェクションの作成を許可しない"}]}]} />

(Replicated, Shared) MergeTree ではない、従来型以外の MergeTree を使用するテーブルで、プロジェクションの作成を許可するかどうかを指定します。
`ignore` オプションは互換性のためだけのものであり、誤った結果を招く可能性があります。それ以外の値では、許可する場合に
プロジェクションのマージ時にどう処理するかを指定します。動作は `drop` または `rebuild` のいずれかです。したがって、従来型の
MergeTree ではこの設定は無視されます。これは `OPTIMIZE DEDUPLICATE`
も制御しますが、効果は MergeTree family のすべてのメンバーに及びます。`lightweight_mutation_projection_mode`
オプションと同様に、これも part level です。

設定可能な値:

* `ignore`
* `throw`
* `drop`
* `rebuild`

<div id="deduplication_hashes_cache_update_wait_ms">
  ## deduplication\_hashes\_cache\_update\_wait\_ms
</div>

<SettingsInfoBlock type="Milliseconds" default_value="100" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.7"},{"label": "100"},{"label": "新しい設定。async_block_ids_cache_update_wait_ms を適切に改名した後継設定です。統合された deduplication_hashes cache が更新されるまで insert が待機する時間を制御します。"}]}]} />

すでに挿入済みのブロックを再確認する前に、各 insert の反復処理が、メモリ内の `deduplication_hashes` cache が
より新しいバージョンに更新されるのを待つ時間です。この cache は ClickHouse Keeper 内の
`deduplication_hashes` ディレクトリを反映しているため、insert は
Keeper との往復変換なしで重複を検出できます。

<div id="default_compression_codec">
  ## default\_compression\_codec
</div>

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.4"},{"label": ""},{"label": "新しい設定"}]}]} />

テーブル宣言で特定のカラムに圧縮コーデックが定義されていない場合に使用される、デフォルトの圧縮コーデックを指定します。
カラムの圧縮コーデックの選択順序:

1. テーブル宣言でそのカラムに定義された圧縮コーデック
2. `default_compression_codec` で定義された圧縮コーデック (この設定)
3. `compression` 設定で定義されたデフォルトの圧縮コーデック
   デフォルト値: 空文字列 (未定義) 。

<div id="disk">
  ## ディスク
</div>

ストレージに使用するディスクの名前です。storage policy の代わりに指定できます。

<div id="dynamic_serialization_version">
  ## dynamic\_serialization\_version
</div>

<SettingsInfoBlock type="MergeTreeDynamicSerializationVersion" default_value="v3" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.8"},{"label": "v2"},{"label": "Dynamic のシリアル化バージョンを制御する設定を追加"}]}, {"id": "row-2","items": [{"label": "25.12"},{"label": "v3"},{"label": "シリアライゼーション／デシリアライゼーションの改善のため、既定で Dynamic の v3 シリアル化バージョンを有効化"}]}]} />

Dynamic データ型のシリアル化バージョンです。互換性のために必要です。

設定可能な値:

* `v1`
* `v2`
* `v3`

<div id="enforce_index_structure_match_on_partition_manipulation">
  ## enforce\_index\_structure\_match\_on\_partition\_manipulation
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "24.12"},{"label": "0"},{"label": "新しい設定"}]}]} />

この設定をパーティション操作
クエリ (`ATTACH/MOVE/REPLACE PARTITION`) の宛先テーブルに対して有効にすると、
ソーステーブルと宛先テーブルの索引およびプロジェクションは
同一である必要があります。無効な場合は、宛先テーブルが
ソーステーブルの索引およびプロジェクションの上位集合を持つことができます。

<div id="execute_merges_on_single_replica_time_threshold">
  ## execute\_merges\_on\_single\_replica\_time\_threshold
</div>

<SettingsInfoBlock type="Seconds" default_value="0" />

この設定の値が 0 より大きい場合、ただ 1 つのレプリカのみが直ちにマージを開始し、他のレプリカはローカルでマージを実行する代わりに、その時間内は結果をダウンロードして待機します。選択されたレプリカがその時間内にマージを完了しなかった場合は、標準の動作にフォールバックします。

設定可能な値:

* 任意の正の整数。

<div id="finished_mutations_to_keep">
  ## finished\_mutations\_to\_keep
</div>

<SettingsInfoBlock type="UInt64" default_value="100" />

完了したミューテーションに関するレコードを保持する件数です。ゼロの場合は、
そのすべてを保持します。

<div id="force_read_through_cache_for_merges">
  ## force\_read\_through\_cache\_for\_merges
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="Bool" default_value="0" />

マージ時の読み取りでファイルシステムキャッシュを強制的に経由させます

<div id="initialization_retry_period">
  ## initialization\_retry\_period
</div>

<SettingsInfoBlock type="Seconds" default_value="60" />

テーブル初期化の再試行間隔 (秒) 。

<div id="kill_threads">
  ## kill\_threads
</div>

<SettingsInfoBlock type="UInt64" default_value="128" />

廃止された設定で、何の効果もありません。

<div id="lightweight_mutation_projection_mode">
  ## lightweight\_mutation\_projection\_mode
</div>

<SettingsInfoBlock type="LightweightMutationProjectionMode" default_value="throw" />

デフォルトでは、論理削除 `DELETE` は
プロジェクション を持つテーブルでは機能しません。これは、projection 内の行が
`DELETE` 操作の影響を受ける可能性があるためです。そのため、デフォルト値は `throw`
です。ただし、このオプションで動作を変更できます。値を `drop` または `rebuild`
のいずれかにすると、プロジェクション に対しても deletes が機能するようになります。`drop` は projection を削除するため、
現在のクエリでは projection が削除されることで高速になる可能性がありますが、
以降のクエリでは projection がアタッチされなくなるため低速になる可能性があります。`rebuild` は
projection を再構築するため、現在のクエリのパフォーマンスに影響する可能性がありますが、
以降のクエリは高速化される可能性があります。さらに、これらのオプションは
パーツ level でのみ機能するため、変更対象にならない パーツ 内の プロジェクション は、
drop や rebuild のようなアクションをトリガーすることなく、そのまま維持されます。

設定可能な値:

* `throw`
* `drop`
* `rebuild`

<div id="load_existing_rows_count_for_old_parts">
  ## load\_existing\_rows\_count\_for\_old\_parts
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

[exclude\_deleted\_rows\_for\_part\_size\_in\_merge](/docs/ja/reference/settings/merge-tree-settings/exclude#exclude_deleted_rows_for_part_size_in_merge) とあわせて有効にすると、
既存のデータパーツの削除済み行数が、テーブルの起動時に
計算されます。なお、これにより起動時のテーブル読み込みが遅くなる可能性があります。

設定可能な値:

* `true`
* `false`

**関連項目**

* [exclude\_deleted\_rows\_for\_part\_size\_in\_merge](/docs/ja/reference/settings/merge-tree-settings/exclude#exclude_deleted_rows_for_part_size_in_merge) 設定

<div id="lock_acquire_timeout_for_background_operations">
  ## lock\_acquire\_timeout\_for\_background\_operations
</div>

<SettingsInfoBlock type="Seconds" default_value="120" />

マージやミューテーションなどのバックグラウンド処理で、テーブルロックを取得できない場合に失敗と見なすまでの秒数。

<div id="mutation_workload">
  ## mutation\_workload
</div>

ミューテーションと他のワークロードの間で、リソースの利用と共有をどのように制御するかを調整するために使用されます。指定した値は、このテーブルのバックグラウンドミューテーションに対する `workload` 設定の値として使用されます。指定しない場合 (空文字列) は、代わりにサーバー設定 `mutation_workload` が使用されます。

**関連項目**

* [ワークロードスケジューリング](/docs/ja/concepts/features/configuration/server-config/workload-scheduling)

<div id="non_replicated_deduplication_window">
  ## non\_replicated\_deduplication\_window
</div>

<SettingsInfoBlock type="UInt64" default_value="0" />

非レプリケートの
[MergeTree](/docs/ja/reference/engines/table-engines/mergetree-family/mergetree) テーブルで、重複確認のためにハッシュ値を保持する直近の挿入ブロック数です。

設定可能な値:

* 任意の正の整数。
* `0` (重複排除を無効化) 。

レプリケートテーブルと同様の重複排除の仕組みが使用されます (
[replicated\_deduplication\_window](/docs/ja/reference/settings/merge-tree-settings/replicated-deduplication-window#replicated_deduplication_window) 設定を参照) 。重複排除用の
ハッシュ値は、挿入されたブロック全体を対象に計算されます。ハッシュ値は
ClickHouse Keeper ではなく、ディスク上のローカルファイルに書き込まれます。

<div id="notify_newest_block_number">
  ## notify\_newest\_block\_number
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="Bool" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.1"},{"label": "0"},{"label": "Cloud sync"}]}]} />

最新の ブロック 番号を SharedJoin または SharedSet に通知します。ClickHouse Cloud でのみ使用できます。

<div id="nullable_serialization_version">
  ## nullable\_serialization\_version
</div>

<SettingsInfoBlock type="MergeTreeNullableSerializationVersion" default_value="basic" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.12"},{"label": "basic"},{"label": "新しい設定"}]}]} />

`Nullable(T)` カラムで使用するシリアライゼーション方式を制御します。

設定可能な値:

* basic — `Nullable(T)` に標準のシリアライゼーションを使用します。

* allow\_sparse — `Nullable(T)` でスパースエンコーディングの使用を許可します。

<div id="object_serialization_version">
  ## object\_serialization\_version
</div>

<SettingsInfoBlock type="MergeTreeObjectSerializationVersion" default_value="v3" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.8"},{"label": "v2"},{"label": "JSON シリアライゼーションバージョンを制御する設定を追加"}]}, {"id": "row-2","items": [{"label": "25.12"},{"label": "v3"},{"label": "高度な共有データシリアライゼーションを使用するため、JSON のデフォルトのシリアライゼーションバージョンとして v3 を有効化"}]}]} />

JSON データ型のシリアライゼーションバージョンです。互換性のために必要です。

設定可能な値:

* `v1`
* `v2`
* `v3`

共有データのシリアライゼーションバージョンを変更できるのは、バージョン `v3` のみです。

<div id="old_parts_lifetime">
  ## old\_parts\_lifetime
</div>

<SettingsInfoBlock type="Seconds" default_value="480" />

突発的なサーバー再起動時のデータ損失を防ぐために、
非アクティブなパーツを保持しておく時間 (秒) 。

設定可能な値:

* 任意の正の整数。

複数のパーツを新しいパーツにマージすると、ClickHouse は元の
パーツを非アクティブとしてマークし、`old_parts_lifetime` 秒が経過した後にのみ削除します。
非アクティブなパーツは、現在のクエリで使用されていない場合、つまり
そのパーツの `refcount` が 1 の場合に削除されます。

新しいパーツに対しては `fsync` が呼び出されないため、しばらくの間、新しいパーツは
server の RAM (OS キャッシュ) 上にしか存在しません。server が突発的に再起動すると、
新しいパーツが失われたり破損したりする可能性があります。データ保護のため、
非アクティブなパーツはすぐには削除されません。

起動時に ClickHouse はパーツの整合性を確認します。マージ済みの
パーツが破損している場合、ClickHouse は非アクティブなパーツをアクティブな一覧に戻し、
その後それらを再度マージします。次に、破損したパーツはリネームされ (`broken_`
プレフィックスが追加され) 、`detached` フォルダーに移動されます。マージ済みのパーツが
破損していない場合は、元の非アクティブなパーツがリネームされ (`ignored_`
プレフィックスが追加され) 、`detached` フォルダーに移動されます。

デフォルトの `dirty_expire_centisecs` 値 (Linux カーネルの設定) は 30
秒 (書き込まれたデータが RAM にのみ保持される最大時間) ですが、
ディスクシステムに高い負荷がかかっている場合、実際の書き込みはそれよりかなり遅くなることがあります。実験的に、
`old_parts_lifetime` には 480 秒という値が選ばれており、この間に
新しいパーツが確実にディスクへ書き込まれることが保証されます。

<div id="optimize_row_order">
  ## optimize\_row\_order
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

新たに挿入されるテーブルパートの圧縮効率を高めるために、挿入時に行順序を最適化するかどうかを制御します。

通常の MergeTree-engine テーブルに対してのみ効果があります。特殊な MergeTree engine テーブル (例: CollapsingMergeTree) には効果がありません。

MergeTree テーブルは、 (必要に応じて) [compression codecs](/docs/ja/reference/statements/create/table#column_compression_codec) を使用して圧縮されます。
LZ4 や ZSTD のような汎用的な圧縮コーデックは、データにパターンがある場合に最大の圧縮率を発揮します。
同じ値が長く連続するデータは、一般に非常によく圧縮されます。

この設定を有効にすると、ClickHouse は、新たに
挿入されるパート内のデータを、新しいテーブルパートの各カラムにおいて同じ値の連続数が最小になるような行順序で格納しようとします。
言い換えると、同じ値の連続数が少ないほど、個々の連続区間は
長くなり、圧縮効率が高くなります。

最適な行順序を見つけることは、計算量の観点から現実的ではありません (NP 困難) 。
そのため、ClickHouse は、元の行順序よりも圧縮率を改善できる行順序を
すばやく見つけるためにヒューリスティックを使用します。

<details markdown="1">
  <summary>行順序を見つけるためのヒューリスティック</summary>

  一般に、テーブル (またはテーブルパート) の行は自由に
  並べ替えることができます。SQL では、行順序が異なっていても同じテーブル (テーブルパート) は
  等価と見なされるためです。

  このような行の並べ替えの自由は、テーブルに主キーが定義されている場合には
  制限されます。ClickHouse では、主キー `C1, C2, ..., CN` によって、
  テーブルの行はカラム `C1`, `C2`, ... `Cn` でソートされることが保証されます ([clustered index](https://en.wikipedia.org/wiki/Database_index#Clustered)) 。
  その結果、行を並べ替えられるのは、「等価クラス」と呼ばれる行の集合の内部だけです。
  つまり、主キーカラムで同じ値を持つ行の中でのみ並べ替えられます。
  直感的には、高カーディナリティの主キー、たとえば `DateTime64` のタイムスタンプカラムを
  含む主キーでは、小さな等価クラスが多数生じます。
  同様に、低カーディナリティの主キーを持つテーブルでは、少数の大きな
  等価クラスが作られます。主キーを持たないテーブルは、すべての行にまたがる
  単一の等価クラスという極端なケースを表します。

  等価クラスの数が少なく、かつ大きいほど、行を再配置する際の自由度は
  高くなります。

  各等価クラス内で最適な行順序を見つけるために適用されるヒューリスティックは、
  D. Lemire, O. Kaser による
  [Reordering columns for smaller indexes](https://doi.org/10.1016/j.ins.2011.02.002)
  で提案されており、各等価クラス内の行を、非主キーカラムの
  カーディナリティが小さい順にソートすることに基づいています。

  これは 3 つの手順で実行されます:

  1. 主キーカラムの行値に基づいて、すべての等価クラスを見つけます。
  2. 各等価クラスについて、非主キーカラムのカーディナリティを
     計算します (通常は推定します) 。
  3. 各等価クラスについて、非主キーカラムのカーディナリティが
     小さい順に行をソートします。
</details>

有効にすると、新しいデータの行順序を分析して
最適化するために、挿入操作で追加の CPU コストが発生します。INSERT は、データの特性に応じて
30～50% 長くかかることが見込まれます。
LZ4 または ZSTD の圧縮率は、平均で 20～40% 改善します。

この設定は、主キーがないテーブル、または低カーディナリティの
主キーを持つテーブル、すなわち異なる主キー値が少数しかないテーブルで最も効果を発揮します。
高カーディナリティの主キー、たとえば型
`DateTime64` の timestamp カラムを含む主キーでは、この設定の恩恵は
期待できません。

<div id="packed_skip_index_max_bytes">
  ## packed\_skip\_index\_max\_bytes
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="UInt64" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.6"},{"label": "0"},{"label": "新しい設定。シリアライズ後のディスク上サイズがこのバイト数以下の skip-index サブストリームを、パーツごとに単一の skp_idx.packed アーカイブにまとめます。これより大きいサブストリームは、従来どおり独立した skp_idx_<name>.idx2 \/ .mrk2 レイアウトのままです。判定は書き込み時にサブストリームごとに行われます。"}]}]} />

skip-index サブストリームを個別の `skp_idx_<name>.idx2` / `.mrk2`
ファイルとして書き込む代わりに、パーツごとに単一の `skp_idx.packed`
アーカイブへまとめるしきい値です (シリアライズ後のディスク上バイト数、つまりサブストリームの圧縮と hashing
chain の後のサイズ) 。この値より大きいサブストリームは、従来のファイル単位レイアウトのままです。判定は
書き込み時にサブストリームごとに独立して行われるため、1 つのパーツ内で小さい索引
(例: `minmax`) はパックされ、大きいもの (例: 重い `bloom_filter`) はファイル単位のままになる場合があります。パッキングを完全に無効化するには 0 を設定します
(既定値) 。

各 skip-index サブストリームは実際には data file と marks file で構成されており、spill の判定が行われるまで両方が
しきい値までメモリ内に buffer されます。そのため、書き込み中の Peak memory
は `2 * packed_skip_index_max_bytes * (number of substreams that stay
below the threshold)` に比例します。

全文索引はこの設定ではサポートされず、パックされることはありません。

パッキングにより、table に多数の skip 索引が定義されている場合の inode 負荷を軽減できます (たとえば
`add_minmax_index_for_numeric_columns` を使用する場合) 。

ディスク上フォーマットは自己記述的です。reader は `skp_idx.packed` を検出し、その内部のパック済み
サブストリームを透過的に提供します。この設定の変更は新しく書き込まれるパーツにのみ影響し、
既存のパーツは書き込み時のレイアウトを保持します。

<div id="part_minmax_index_columns">
  ## part\_minmax\_index\_columns
</div>

<SettingsInfoBlock type="MergeTreePartMinMaxIndexColumns" default_value="partition_key_only" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.5"},{"label": "partition_key_only"},{"label": "新しい設定"}]}]} />

パートごとの min-max 索引が対象とするカラムを選択します。各値を選ぶと、1つ前の値で有効になるカラム群に加えて、さらに別のカラム群が有効になります。

設定可能な値:

* `partition_key_only` — パーティションキーのカラムのみを追跡します。
* `with_block_number_offset` — パーティションキーのカラムに加えて、永続化された仮想カラム `_block_number` と `_block_offset` も追跡します。これにより、これらのカラムによるパートレベルの pruning が有効になります。

<div id="propagate_types_serialization_versions_to_nested_types">
  ## propagate\_types\_serialization\_versions\_to\_nested\_types
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.3"},{"label": "1"},{"label": "デフォルトでデータ型のシリアライゼーションバージョンをネスト型に伝播する"}]}]} />

true の場合、`string_serialization_version` のようなシリアライゼーションバージョンは、Array/Map/Nullable/JSON/etc. のようなネスト型の内部にも伝播されます。無効にすると、シリアライゼーションバージョンはこの型のトップレベルのカラムと Tuple el にのみ適用されます

<div id="ratio_of_defaults_for_sparse_serialization">
  ## ratio\_of\_defaults\_for\_sparse\_serialization
</div>

<SettingsInfoBlock type="Float" default_value="0.9375" />

カラム内の *デフォルト* 値の数を *全* 値の数で割った比率の最小値です。
この値を設定すると、そのカラムはスパースな
シリアライゼーションで保存されます。

カラムがスパースである場合 (ほとんどの値がゼロである場合) 、ClickHouse はそれを
スパースなフォーマットでエンコードし、計算を自動的に最適化できます。つまり、クエリ時に
データを完全に伸長する必要がありません。このスパース
シリアライゼーションを有効にするには、`ratio_of_defaults_for_sparse_serialization`
設定を 1.0 未満にしてください。値が 1.0 以上の場合、
カラムは常に通常の完全なシリアライゼーションで書き込まれます。

設定可能な値:

* スパースなシリアライゼーションを有効にするには、`0` から `1` の間の Float
* スパースなシリアライゼーションを使用しない場合は、`1.0` (またはそれ以上)

**例**

次のテーブルでは、`s` カラムは 95% の
行で空文字列です。`my_regular_table` ではスパースなシリアライゼーションを使用せず、
`my_sparse_table` では `ratio_of_defaults_for_sparse_serialization` を
0.95 に設定しています:

```sql theme={null}
CREATE TABLE my_regular_table
(
`id` UInt64,
`s` String
)
ENGINE = MergeTree
ORDER BY id;

INSERT INTO my_regular_table
SELECT
number AS id,
number % 20 = 0 ? toString(number): '' AS s
FROM
numbers(10000000);

CREATE TABLE my_sparse_table
(
`id` UInt64,
`s` String
)
ENGINE = MergeTree
ORDER BY id
SETTINGS ratio_of_defaults_for_sparse_serialization = 0.95;

INSERT INTO my_sparse_table
SELECT
number,
number % 20 = 0 ? toString(number): ''
FROM
numbers(10000000);
```

`my_sparse_table` の `s` カラムが、ディスク上で使用するストレージ容量が少ないことに注目してください。

```sql theme={null}
SELECT table, name, data_compressed_bytes, data_uncompressed_bytes FROM system.columns
WHERE table LIKE 'my_%_table';
```

```response theme={null}
┌─table────────────┬─name─┬─data_compressed_bytes─┬─data_uncompressed_bytes─┐
│ my_regular_table │ id   │              37790741 │                75488328 │
│ my_regular_table │ s    │               2451377 │                12683106 │
│ my_sparse_table  │ id   │              37790741 │                75488328 │
│ my_sparse_table  │ s    │               2283454 │                 9855751 │
└──────────────────┴──────┴───────────────────────┴─────────────────────────┘
```

カラムでスパースエンコーディングが使用されているかどうかは、
`system.parts_columns` テーブルの `serialization_kind` カラムを見ることで確認できます:

```sql theme={null}
SELECT column, serialization_kind FROM system.parts_columns
WHERE table LIKE 'my_sparse_table';
```

`s` のどの部分がスパースシリアライゼーションで保存されたかを確認できます:

```response theme={null}
┌─column─┬─serialization_kind─┐
│ id     │ Default            │
│ s      │ Default            │
│ id     │ Default            │
│ s      │ Default            │
│ id     │ Default            │
│ s      │ Sparse             │
│ id     │ Default            │
│ s      │ Sparse             │
│ id     │ Default            │
│ s      │ Sparse             │
│ id     │ Default            │
│ s      │ Sparse             │
│ id     │ Default            │
│ s      │ Sparse             │
│ id     │ Default            │
│ s      │ Sparse             │
│ id     │ Default            │
│ s      │ Sparse             │
│ id     │ Default            │
│ s      │ Sparse             │
│ id     │ Default            │
│ s      │ Sparse             │
└────────┴────────────────────┘
```

<div id="reduce_blocking_parts_sleep_ms">
  ## reduce\_blocking\_parts\_sleep\_ms
</div>

<SettingsInfoBlock type="UInt64" default_value="5000" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.1"},{"label": "5000"},{"label": "Cloud sync"}]}]} />

ClickHouse Cloudでのみ利用できます。どの範囲も削除または置換されなかった場合に、blocking parts の削減を再度試みるまでの最小待機時間です。設定値を小さくすると、background\_schedule\_pool 内のタスクが高頻度でトリガーされるため、大規模なクラスターでは ZooKeeper への大量のリクエストが発生します

<div id="replace_long_file_name_to_hash">
  ## replace\_long\_file\_name\_to\_hash
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

カラムのファイル名が長すぎる場合 ('max\_file\_name\_length'
バイトを超える場合) は、SipHash128に置き換えます

<div id="replicated_can_become_leader">
  ## replicated\_can\_become\_leader
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

`true` の場合、このノード上のレプリケートテーブルのレプリカは
リーダーになることを試みます。

設定可能な値:

* `true`
* `false`

<div id="search_orphaned_parts_disks">
  ## search\_orphaned\_parts\_disks
</div>

<SettingsInfoBlock type="SearchOrphanedPartsDisks" default_value="any" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.8"},{"label": "any"},{"label": "新しい設定"}]}]} />

ClickHouse は、policy に含まれない未定義のディスク上にあるデータパーツの見落としを防ぐため、
ATTACH または CREATE table のたびに、孤立したパーツがないかすべてのディスクを走査します。
孤立したパーツは、たとえばディスクが storage policy から除外された場合のような、
安全でない可能性があるストレージの再構成によって発生します。
この設定では、ディスクの特性に基づいて検索対象とするディスクの範囲を制限します。

設定可能な値:

* any - 範囲は制限されません。
* local - 範囲はローカルディスクに制限されます。
* none - 対象範囲を空にし、検索しません

<div id="serialization_info_version">
  ## serialization\_info\_version
</div>

<SettingsInfoBlock type="MergeTreeSerializationInfoVersion" default_value="with_types" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.11"},{"label": "with_types"},{"label": "カスタム文字列シリアライゼーションを可能にする新しいフォーマットに変更"}]}, {"id": "row-2","items": [{"label": "25.10"},{"label": "basic"},{"label": "新しい設定"}]}]} />

`serialization.json` の書き込み時に使用するシリアライゼーションバージョンです。
この設定は、クラスターのアップグレード時に互換性を保つために必要です。

設定可能な値:

* `basic` - 基本フォーマット。
* `with_types` - 追加の `types_serialization_versions` フィールドを含むフォーマットで、型ごとのシリアライゼーションバージョンを使用できます。
  これにより、`string_serialization_version` のような設定が有効になります。

ローリングアップグレード中は、これを `basic` に設定し、新しいサーバーが
古いサーバーと互換性のあるデータパーツを生成するようにします。アップグレード完了後は、
型ごとのシリアライゼーションバージョンを有効にするため、`WITH_TYPES` に切り替えます。

<div id="share_nested_offsets">
  ## share\_nested\_offsets
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.4"},{"label": "1"},{"label": "false に設定すると、共通のプレフィックスを持つドット区切りの名前の Array カラムは、従来の Nested セマンティクスで offsets ファイルを共有するのではなく、独立したカラムとして扱われます"}]}]} />

有効時 (デフォルト) には、共通のプレフィックスを持つドット区切りの名前の Array カラム (例: `n.a` および `n.b`)
は Nested 構造の一部として扱われます。これらはディスク上の単一の offsets ファイル (例: `n.size0`) を共有し、
INSERT 時には配列サイズが同一であることが検証されます。
無効時には、各 Array カラムがそれぞれ独立した offsets ファイルを持ち、ドット区切りの名前に特別な
セマンティクスはなくなります。また、同じプレフィックスを共有するドット区切りの Array カラムと
スカラー カラムを共存させることもできます
(例: `n UInt32` と `n.a Array(String)`) 。この設定はテーブル作成後は変更できません。

<div id="simultaneous_parts_removal_limit">
  ## simultaneous\_parts\_removal\_limit
</div>

<SettingsInfoBlock type="UInt64" default_value="0" />

古いパーツが多数ある場合、クリーンアップスレッドは1回の反復で最大
`simultaneous_parts_removal_limit` 個のパーツを削除しようとします。
`simultaneous_parts_removal_limit` を `0` に設定すると、上限なしを意味します。

<div id="storage_policy">
  ## storage\_policy
</div>

<SettingsInfoBlock type="String" default_value="default" />

ストレージディスクポリシー名

<div id="string_serialization_version">
  ## string\_serialization\_version
</div>

<SettingsInfoBlock type="MergeTreeStringSerializationVersion" default_value="with_size_stream" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.11"},{"label": "with_size_stream"},{"label": "サイズを別に持つ新しいフォーマットに変更"}]}, {"id": "row-2","items": [{"label": "25.10"},{"label": "single_stream"},{"label": "新しい設定"}]}]} />

トップレベルの `String` カラムのシリアライゼーション フォーマットを制御します。

この設定は、`serialization_info_version` が "with\_types" に設定されている場合にのみ有効です。
`with_size_stream` に設定すると、トップレベルの `String` カラムは、サイズをインラインで格納するのではなく、
文字列長を格納する独立した `.size` サブカラムを使ってシリアライズされます。これにより実際の `.size`
サブカラムを利用できるようになり、圧縮効率が向上する場合があります。

ネストされた `String` 型 (たとえば `Nullable`、`LowCardinality`、`Array`、`Map` の内部にあるもの)
は、`Tuple` 内に現れる場合を除き、影響を受けません。

設定可能な値:

* `single_stream` — サイズをインラインで格納する標準のシリアライゼーション フォーマットを使用します。
* `with_size_stream` — トップレベルの `String` カラムに対して、独立したサイズストリームを使用します。

<div id="temporary_directories_lifetime">
  ## temporary\_directories\_lifetime
</div>

<SettingsInfoBlock type="Seconds" default_value="86400" />

tmp\_ディレクトリを保持する期間 (秒) です。この値は下げないでください。
この設定値が小さいと、マージやミューテーションが正常に動作しない可能性があるためです。

<div id="try_fetch_recompressed_part_timeout">
  ## try\_fetch\_recompressed\_part\_timeout
</div>

<SettingsInfoBlock type="Seconds" default_value="7200" />

再圧縮を伴うマージを開始するまでのタイムアウト時間 (秒) 。この間、
ClickHouse は、この再圧縮を伴うマージが割り当てられたレプリカから、
再圧縮済みのパートを取得しようとします。

再圧縮は多くの場合低速なため、このタイムアウトが経過するまでは
再圧縮を伴うマージを開始せず、この再圧縮を伴うマージが割り当てられた
レプリカから再圧縮済みのパートを取得しようとします。

設定可能な値:

* 任意の正の整数。

<div id="ttl_only_drop_parts">
  ## ttl\_only\_drop\_parts
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

`TTL` 設定に従ってそのパーツ内のすべての行の有効期限が切れた場合に、
MergeTree テーブルでデータパーツ全体を完全に削除するかどうかを制御します。

`ttl_only_drop_parts` が無効な場合 (デフォルト) 、
TTL 設定に基づいて有効期限が切れた行のみが削除されます。

`ttl_only_drop_parts` が有効な場合、
`TTL` 設定に従ってそのパーツ内のすべての行の有効期限が切れていれば、パーツ全体が削除されます。

<div id="wait_for_unique_parts_send_before_shutdown_ms">
  ## wait\_for\_unique\_parts\_send\_before\_shutdown\_ms
</div>

<SettingsInfoBlock type="Milliseconds" default_value="0" />

シャットダウン前に、テーブルは一意なパーツ
(現在のレプリカにのみ存在するもの) が他のレプリカにフェッチされるまで、必要な時間だけ待機します (0 は
無効を意味します) 。

<div id="zookeeper_session_expiration_check_period">
  ## zookeeper\_session\_expiration\_check\_period
</div>

<SettingsInfoBlock type="Seconds" default_value="60" />

ZooKeeper セッションの有効期限切れを確認する間隔 (秒単位) 。

設定可能な値:

* 任意の正の整数。
