ClickHouse/docs/ja/operations/settings/merge-tree-settings.md
2024-11-18 11:58:58 +09:00

56 KiB
Raw Blame History

slug title
/ja/operations/settings/merge-tree-settings MergeTree テーブルの設定

システムテーブル system.merge_tree_settings には、グローバルに設定された MergeTree の設定が表示されます。

MergeTree の設定はサーバーの設定ファイルの merge_tree セクションで設定できます。また、CREATE TABLE ステートメントの SETTINGS 句で個々の MergeTree テーブルに対して指定することもできます。

max_suspicious_broken_parts の設定をカスタマイズする例:

サーバー設定ファイルで、すべての MergeTree テーブルに対するデフォルトを設定します。

<merge_tree>
    <max_suspicious_broken_parts>5</max_suspicious_broken_parts>
</merge_tree>

特定のテーブルに対して設定する場合:

CREATE TABLE tab
(
    `A` Int64
)
ENGINE = MergeTree
ORDER BY tuple()
SETTINGS max_suspicious_broken_parts = 500;

特定のテーブルの設定を ALTER TABLE ... MODIFY SETTING で変更する場合:

ALTER TABLE tab MODIFY SETTING max_suspicious_broken_parts = 100;

-- グローバルなデフォルトsystem.merge_tree_settings からの値)にリセット
ALTER TABLE tab RESET SETTING max_suspicious_broken_parts;

index_granularity

インデックスのマーク間のデータ行の最大数。

デフォルト値: 8192。

index_granularity_bytes

データ粒度の最大サイズ(バイト単位)。

デフォルト値: 10485760 (約10 MiB)。

行数のみで粒度サイズを制限するには、0に設定します推奨されません

min_index_granularity_bytes

許容されるデータ粒度の最小サイズ(バイト単位)。

デフォルト値: 1024バイト。

非常に低い index_granularity_bytes を持つテーブルの誤作成を防ぐための保護手段です。

enable_mixed_granularity_parts

index_granularity_bytes 設定で粒度サイズを管理するための遷移を有効または無効にします。バージョン 19.11 以前では、粒度サイズを制限するために index_granularity 設定のみがありました。index_granularity_bytes 設定は、巨大な行(数十メガバイト、数百メガバイト)があるテーブルからデータを選択する際の ClickHouse のパフォーマンスを向上させます。大型の行を持つテーブルがある場合、この設定をテーブルに対して有効にすると、SELECT クエリの効率性が向上します。

use_minimalistic_part_header_in_zookeeper

ZooKeeper におけるデータパーツヘッダーの格納方法。これを有効にすると、ZooKeeper はより少ないデータを保存します。詳細はこちらを参照してください。

min_merge_bytes_to_use_direct_io

ストレージディスクへのダイレクトI/Oアクセスを使用するために必要なマージ操作の最小データ量。データパーツをマージする際、ClickHouse はマージするすべてのデータの総ストレージ量を計算します。 もし量が min_merge_bytes_to_use_direct_io バイトを超える場合、ClickHouse はデータをストレージディスクに読み書きします。このとき、ダイレクトI/Oインターフェースを使用しますO_DIRECT オプション)。 もし min_merge_bytes_to_use_direct_io = 0 場合、ダイレクトI/Oは無効になります。

デフォルト値: 10 * 1024 * 1024 * 1024 バイト。

merge_with_ttl_timeout

有効期限 (TTL) による削除と共にマージを繰り返すまでの最小遅延時間(秒単位)。

デフォルト値: 144004時間

merge_with_recompression_ttl_timeout

再圧縮 TTL を使用するマージを繰り返すまでの最小遅延時間(秒単位)。

デフォルト値: 144004時間

write_final_mark

データパートの最後(最終バイト後)に最終インデックスマークを書き込むかどうかを設定します。

デフォルト値: 1。

変更しないでください。悪いことが起こります。

storage_policy

ストレージポリシー。

min_bytes_for_wide_part

Wide フォーマットで保存できるデータパートに含まれる最小のバイト/行数。 これらの設定の一つ、両方、またはどちらも設定できます。

max_compress_block_size

テーブルに書き込む前に圧縮される未圧縮データのブロックの最大サイズ。 この設定はグローバル設定にも指定できます(max_compress_block_size設定を参照)。 テーブル作成時に指定した値が、この設定のグローバル値を上書きします。

min_compress_block_size

次のマークを記録する際に圧縮が必要な未圧縮データのブロックの最小サイズ。 この設定はグローバル設定にも指定できます(min_compress_block_size設定を参照)。 テーブル作成時に指定した値が、この設定のグローバル値を上書きします。

max_suspicious_broken_parts

単一のパーティション内で破損したパーツの数が max_suspicious_broken_parts の値を超えると、 自動削除が拒否されます。

許容される値:

  • 任意の正の整数。

デフォルト値: 100。

parts_to_throw_insert

単一のパーティション内のアクティブなパーツの数が parts_to_throw_insert の値を超えると、INSERTToo many parts (N). Merges are processing significantly slower than inserts という例外で中断されます。

許容される値:

  • 任意の正の整数。

デフォルト値: 3000。

SELECT クエリの最大パフォーマンスを達成するには、処理されるパーツの数を最小限に抑える必要があります。詳細は Merge Tree を参照してください。

バージョン 23.6 より前では、この設定は 300 に設定されていました。異なる高い値を設定することもできますが、Too many parts エラーの発生確率を低くする一方で、SELECT のパフォーマンスが低下する可能性があります。また、マージの問題が発生した場合(例: ディスク容量の不足)、元の 300 での設定よりも気づくのが遅れます。

parts_to_delay_insert

単一のパーティション内のアクティブなパーツの数が parts_to_delay_insert の値を超えると、INSERT が意図的に遅延されます。

許容される値:

  • 任意の正の整数。

デフォルト値: 1000。

ClickHouse は、バックグラウンドのマージプロセスがパーツを追加するよりも速くマージできるように、INSERT を遅延(「スリープ」を追加)して実行します。

inactive_parts_to_throw_insert

単一のパーティションにおける非アクティブなパーツの数が inactive_parts_to_throw_insert の値を超える場合、INSERT は "Too many inactive parts (N). Parts cleaning are processing significantly slower than inserts" という例外で中断されます。

許容される値:

  • 任意の正の整数。

デフォルト値: 0無制限

inactive_parts_to_delay_insert

単一のパーティションにおける非アクティブなパーツの数が inactive_parts_to_delay_insert の値に達すると、INSERT は意図的に遅延されます。これは、サーバーがパーツを速やかにクリーンアップできない場合に役立ちます。

許容される値:

  • 任意の正の整数。

デフォルト値: 0無制限

max_delay_to_insert

単一のパーティション内のアクティブなパーツの数が parts_to_delay_insert の値を超えた場合に INSERT 遅延を計算するために使用される秒単位の値。

許容される値:

  • 任意の正の整数。

デフォルト値: 1。

INSERT の遅延(ミリ秒単位)は次の式で計算されます:

max_k = parts_to_throw_insert - parts_to_delay_insert
k = 1 + parts_count_in_partition - parts_to_delay_insert
delay_milliseconds = pow(max_delay_to_insert * 1000, k / max_k)

例えば、パーティションに 299 のアクティブなパーツがあり、parts_to_throw_insert = 300, parts_to_delay_insert = 150, max_delay_to_insert = 1 の場合、INSERTpow( 1 * 1000, (1 + 299 - 150) / (300 - 150) ) = 1000 ミリ秒遅延されます。

バージョン 23.1 から式が変更されました:

allowed_parts_over_threshold = parts_to_throw_insert - parts_to_delay_insert
parts_over_threshold = parts_count_in_partition - parts_to_delay_insert + 1
delay_milliseconds = max(min_delay_to_insert_ms, (max_delay_to_insert * 1000) * parts_over_threshold / allowed_parts_over_threshold)

例えば、パーティションに 224 のアクティブなパーツがあり、parts_to_throw_insert = 300, parts_to_delay_insert = 150, max_delay_to_insert = 1, min_delay_to_insert_ms = 10 の場合、INSERTmax( 10, 1 * 1000 * (224 - 150 + 1) / (300 - 150) ) = 500 ミリ秒遅延されます。

max_parts_in_total

テーブルのすべてのパーティションのアクティブなパーツの総数が max_parts_in_total の値を超えた場合、INSERTToo many parts (N) という例外で中断されます。

許容される値:

  • 任意の正の整数。

デフォルト値: 100000。

テーブル中のパーツの数が多いと、ClickHouse クエリのパフォーマンスが低下し、ClickHouse の起動時間が長くなります。通常、これはパーティション戦略の選択ミス(あまりに小さなパーティション)が原因で誤った設計の結果です。

simultaneous_parts_removal_limit

古いパーツが大量にある場合、クリーンスレッドは同じイテレーションで simultaneous_parts_removal_limit パーツを削除しようとします。 simultaneous_parts_removal_limit0 に設定されている場合は無制限を意味します。

デフォルト値: 0。

replicated_deduplication_window

ClickHouse Keeper が重複をチェックするためにハッシュを保存する最近挿入されたブロックの数。

許容される値:

  • 任意の正の整数。
  • 0重複排除を無効にする

デフォルト値: 1000。

Insert コマンドは1つ以上のブロックパーツを作成します。レプリケートされたテーブルに書き込む際の挿入重複排除のために、ClickHouse は作成されたパーツのハッシュをClickHouse Keeperに書き込みます。ハッシュは、最新の replicated_deduplication_window ブロックのみに保存されます。古いハッシュはClickHouse Keeperから削除されます。 replicated_deduplication_window が多いほど、Inserts の実行が遅くなります。なぜなら、より多くのエントリと比較する必要があるからです。 ハッシュはフィールド名と型の組成および挿入されたパーツのデータ(バイトのストリーム)から計算されます。

non_replicated_deduplication_window

重複をチェックするためにハッシュが保存される、非レプリケートMergeTree テーブルの最近挿入されたブロックの数。

許容される値:

  • 任意の正の整数。
  • 0重複排除を無効にする

デフォルト値: 0。

レプリケートされたテーブルに似た重複排除機構を使用します(replicated_deduplication_windowの設定を参照)。作成されたパーツのハッシュはディスク上のローカルファイルに書き込まれます。

replicated_deduplication_window_seconds

挿入されたブロックのハッシュがClickHouse Keeperから削除されるまでの秒数。

許容される値:

  • 任意の正の整数。

デフォルト値: 604800 (1週間)。

replicated_deduplication_windowに似ていますが、replicated_deduplication_window_seconds は挿入重複排除のためのブロックハッシュを保存する期間を指定します。replicated_deduplication_window_secondsより古いハッシュは、replicated_deduplication_window未満であってもClickHouse Keeperから削除されます。

時間は最新のレコードの時間に対して相対的であり、実際の時間に対してではありません。もしそれが唯一のレコードであれば、永遠に保存されます。

replicated_deduplication_window_for_async_inserts

ClickHouse Keeper が重複をチェックするためにハッシュを保存する最近の非同期挿入ブロックの数。

許容される値:

  • 任意の正の整数。
  • 0非同期挿入の重複排除を無効にする

デフォルト値: 10000。

非同期インサート コマンドは一つ以上のブロック(パーツ)にキャッシュされていきます。レプリケートされたテーブルに書き込む際の 挿入重複排除 のために、ClickHouse は各挿入のハッシュをClickHouse Keeperに書き込みます。ハッシュは、最新の replicated_deduplication_window_for_async_inserts ブロックのみに保存されます。古いハッシュはClickHouse Keeperから削除されます。 replicated_deduplication_window_for_async_inserts が多いほど、Async Inserts の実行が遅くなります。なぜなら、より多くのエントリと比較する必要があるからです。 ハッシュはフィールド名と型の組成および挿入データ(バイトのストリーム)から計算されます。

replicated_deduplication_window_seconds_for_async_inserts

非同期の挿入のハッシュがClickHouse Keeperから削除されるまでの秒数。

許容される値:

  • 任意の正の整数。

デフォルト値: 604800 (1週間)。

replicated_deduplication_window_for_async_inserts に似ており、非同期挿入重複排除のためのブロックのハッシュを保存する期間を指定します。replicated_deduplication_window_seconds_for_async_inserts より古いハッシュは、replicated_deduplication_window_for_async_inserts より少なくても ClickHouse Keeper から削除されます。

時間は最新のレコードの時間に対して相対的であり、実際の時間に対してではありません。もしそれが唯一のレコードであれば、永遠に保存されます。

use_async_block_ids_cache

true の場合、非同期挿入のハッシュをキャッシュします。

許容される値:

  • true, false

デフォルト値: false。

複数の非同期挿入を持つブロックは、複数のハッシュを生成します。一部の挿入が重複している場合、Keeper は1つのRPCで1つの重複したハッシュのみを返し、不要なRPCリトライを引き起こします。このキャッシュはKeeperのハッシュパスを監視します。Keeperで更新が監視されている場合、キャッシュは可能な限り早く更新され、メモリ内で重複した挿入をフィルタリングできるようになります。

async_block_ids_cache_min_update_interval_ms

use_async_block_ids_cache を更新するための最小間隔(ミリ秒単位)

許容される値:

  • 任意の正の整数。

デフォルト値: 100。

通常、use_async_block_ids_cache は監視されているKeeperパスで更新があるとすぐに更新されます。ただし、キャッシュの更新が頻繁すぎると負担がかかる可能性があります。この最小間隔がキャッシュの更新が過度に速くなるのを防ぎます。この値を長く設定しすぎると、重複した挿入を含むブロックのリトライ時間が長くなる可能性があります。

max_replicated_logs_to_keep

非アクティブなレプリカがある場合、ClickHouse Keeper のログに存在できる最大記録数。非アクティブなレプリカは、この数を超えると失われます。

許容される値:

  • 任意の正の整数。

デフォルト値: 1000

min_replicated_logs_to_keep

ZooKeeper ログにある最後の記録をこの数まで保持します。テーブルの作業には影響を与えません: ZooKeeper ログのクリーンアップ前に診断するためだけに使用されます。

許容される値:

  • 任意の正の整数。

デフォルト値: 10

prefer_fetch_merged_part_time_threshold

レプリケーションログClickHouse Keeper または ZooKeeperのエントリ作成からの経過時間が指定されたしきい値を超え、パーツのサイズの合計が prefer_fetch_merged_part_size_threshold を超える場合、ローカルでマージを行う代わりに、レプリカからマージされたパーツをフェッチすることが推奨されます。これにより非常に長いマージを高速化します。

許容される値:

  • 任意の正の整数。

デフォルト値: 3600

prefer_fetch_merged_part_size_threshold

パーツサイズの合計がこのしきい値を超え、レプリケーションログエントリの作成からの経過時間が prefer_fetch_merged_part_time_threshold を超える場合、ローカルでマージを行う代わりにレプリカからマージされたパーツをフェッチすることが推奨されます。これにより非常に長いマージを高速化します。

許容される値:

  • 任意の正の整数。

デフォルト値: 10,737,418,240

execute_merges_on_single_replica_time_threshold

この設定の値がゼロより大きい場合、1つのレプリカのみがすぐにマージを開始し、他のレプリカはその結果をダウンロードするためにその時間まで待ちます。その時間内に選ばれたレプリカがマージを完了しない場合は、標準の動作にフォールバックします。

許容される値:

  • 任意の正の整数。

デフォルト値: 0

remote_fs_execute_merges_on_single_replica_time_threshold

この設定の値がゼロより大きい場合、マージされたパーツが共有ストレージ上にあり、allow_remote_fs_zero_copy_replication が有効になっている場合、1つのレプリカのみがマージをすぐに開始します。

:::note ゼロコピー レプリケーションはまだ本番環境では使用できません ゼロコピー レプリケーションは ClickHouse バージョン 22.8 以降でデフォルトで無効になっています。この機能は本番環境での使用を推奨しません。 :::

許容される値:

  • 任意の正の整数。

デフォルト値: 10800

try_fetch_recompressed_part_timeout

再圧縮を伴うマージを開始する前のタイムアウト(秒単位)。この期間、新しい圧縮パーツを取得しようとします。この期間中、再圧縮を伴うマージをクリックハウスが割り当てられている場合のレプリカからフェッチしようとします。

再圧縮は多くの場合遅く動作するため、このタイムアウトまで再圧縮を伴うマージを開始することなく、再圧縮された部分をレプリカからフェッチしようとします。

許容される値:

  • 任意の正の整数。

デフォルト値: 7200

always_fetch_merged_part

true の場合、このレプリカはパーツをマージせず、常に他のレプリカからマージされたパーツをダウンロードします。

許容される値:

  • true, false

デフォルト値: false

max_suspicious_broken_parts

最大破損パーツ数、これを超えると自動削除が拒否されます。

許容される値:

  • 任意の正の整数。

デフォルト値: 100

max_suspicious_broken_parts_bytes

全部の破損パーツの最大サイズ、これを超える場合、自動削除が拒否されます。

許容される値:

  • 任意の正の整数。

デフォルト値: 1,073,741,824

max_files_to_modify_in_alter_columns

ファイルの変更(削除、追加)数がこの設定値を超える場合 ALTER を適用しません。

許容される値:

  • 任意の正の整数。

デフォルト値: 75

max_files_to_remove_in_alter_columns

削除ファイル数がこの設定値を超える場合、 ALTER を適用しません。

許容される値:

  • 任意の正の整数。

デフォルト値: 50

replicated_max_ratio_of_wrong_parts

不正なパーツの比率が総パーツ数を基準としてこの値を下回っている場合に開始を許可します。

許容される値:

  • 浮動小数点数、0.0 - 1.0

デフォルト値: 0.5

replicated_max_parallel_fetches_for_host

エンドポイントからの並列フェッチの制限(実際のプールサイズ)。

許容される値:

  • 任意の正の整数。

デフォルト値: 15

replicated_fetches_http_connection_timeout

部分フェッチリクエストの HTTP 接続タイムアウト。デフォルトプロファイル http_connection_timeout より継承され、明示的に設定されていない場合。

許容される値:

  • 任意の正の整数。

デフォルト値: 明示的に設定されていない場合はデフォルトプロファイル http_connection_timeout より継承されます。

replicated_can_become_leader

true の場合、このノード上のレプリカーテーブルのレプリカがリーダーシップを取得しようとします。

許容される値:

  • true, false

デフォルト値: true

zookeeper_session_expiration_check_period

ZooKeeper セッションの有効期限チェック期間、秒単位。

許容される値:

  • 任意の正の整数。

デフォルト値: 60

detach_old_local_parts_when_cloning_replica

失われたレプリカを修復する際に古いローカルパーツを削除しません。

許容される値:

  • true, false

デフォルト値: true

replicated_fetches_http_connection_timeout

部分フェッチリクエストの HTTP 接続タイムアウト(秒単位)。明示的に設定されていない場合は、デフォルトプロファイルhttp_connection_timeoutより継承されます。

許容される値:

  • 任意の正の整数。
  • 0 - http_connection_timeout の値を使用します。

デフォルト値: 0。

replicated_fetches_http_send_timeout

部分フェッチリクエストの HTTP 送信タイムアウト(秒単位)。明示的に設定されていない場合は、デフォルトプロファイルhttp_send_timeoutより継承されます。

許容される値:

  • 任意の正の整数。
  • 0 - http_send_timeout の値を使用します。

デフォルト値: 0。

replicated_fetches_http_receive_timeout

フェッチ部分リクエストの HTTP 受信タイムアウト(秒単位)。明示的に設定されていない場合は、デフォルトプロファイルhttp_receive_timeoutより継承されます。

許容される値:

  • 任意の正の整数。
  • 0 - http_receive_timeout の値を使用します。

デフォルト値: 0。

max_replicated_fetches_network_bandwidth

レプリケートされた フェッチのためのネットワークの最大速度を秒あたりのバイト数で制限します。この設定は特定のテーブルに適用され、max_replicated_fetches_network_bandwidth_for_server 設定はサーバに対して適用されます。

サーバーネットワークと特定のテーブル用ネットワークは両方設定することができますが、このためにはテーブルレベル設定の値がサーバレベルのものよりも小さくなければなりません。そうでない場合、サーバーはmax_replicated_fetches_network_bandwidth_for_server 設定だけを考慮します。

この設定は正確に順守されていません。

許容される値:

  • 正の整数。
  • 0 — 無制限。

デフォルト値: 0.

使用方法

新しいノードを追加または置換する際にデータをレプリケートする速度を制限するために使用される。

max_replicated_sends_network_bandwidth

レプリケートされた 送信のためのネットワークの最大速度を秒あたりのバイト数で制限します。この設定は特定のテーブルに適用され、max_replicated_sends_network_bandwidth_for_server 設定はサーバに対して適用されます。

サーバーネットワークと特定のテーブル用ネットワークは両方設定することができますが、このためにはテーブルレベル設定の値がサーバレベルのものよりも小さくなければなりません。そうでない場合、サーバーはmax_replicated_sends_network_bandwidth_for_server 設定だけを考慮します。

この設定は正確に順守されていません。

許容される値:

  • 正の整数。
  • 0 — 無制限。

デフォルト値: 0.

使用方法

新しいノードを追加または置換する際にデータをレプリケートする速度を制限するために使用される。

old_parts_lifetime

サーバの予期しない再起動中のデータ損失を防ぐための非アクティブパーツの保持時間(秒単位)。

許容される値:

  • 任意の正の整数。

デフォルト値: 480。

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

新しいパーツには fsync が呼び出されないため、新しいパーツは一時的にサーバのRAMOSキャッシュにのみ存在します。サーバが予期せず再起動された場合、新しいパーツが失われたり損傷を受けたりする可能性があります。 データを保護するために、非アクティブパーツはすぐに削除されません。

起動時、ClickHouse はパーツの整合性を確認します。 マージされたパーツが損傷している場合、ClickHouse は非アクティブパーツをアクティブリストに戻し、それらを再びマージします。その後、損傷したパーツはリネームされ(broken_ 接頭辞が追加)、detached フォルダに移動されます。 マージされたパーツが損傷していない場合、元の非アクティブパーツはリネームされ(ignored_ 接頭辞が追加)、detached フォルダに移動されます。

デフォルトの dirty_expire_centisecsLinux カーネル設定)は 30 秒書き込まれたデータがRAMにのみ保存される最大時間ですが、ディスクシステムに負荷がかかると、データははるか後に書き込まれます。エクスペリメンタルに、old_parts_lifetime の値として 480 秒が選ばれ、新しいパーツがディスクに確実に書き込まれる時間となります。

max_bytes_to_merge_at_max_space_in_pool

十分なリソースが利用可能な場合に1つのパーツにマージされる最大トータルパーツサイズバイト単位max_bytes_to_merge_at_max_space_in_poolは、自動バックグラウンドマージによって作成される最大可能パーツサイズにおおよそ対応しています。

許容される値:

  • 任意の正の整数。

デフォルト値: 161061273600 (150 GB)。

マージスケジューラは定期的にパーティション内のパーツサイズと数を分析し、プール内に十分な空きリソースがある場合、バックグラウンドマージを開始します。マージは、ソースパーツの総サイズが max_bytes_to_merge_at_max_space_in_pool を超えるまで行われます。

OPTIMIZE FINALによって開始されたマージは、max_bytes_to_merge_at_max_space_in_pool を無視し、利用可能なリソース空きディスク容量を考慮して、パーティション内に1つのパーツが残るまでパーツをマージします。

max_bytes_to_merge_at_min_space_in_pool

バックグラウンドプールで最小の利用可能リソースで1つのパーツにマージされる最大トータルパーツサイズバイト単位

許容される値:

  • 任意の正の整数。

デフォルト値: 1048576 (1 MB)

max_bytes_to_merge_at_min_space_in_poolは、ディスク空き容量不足の状況でも小さなパーツの数を減らすために、最大トータルパーツサイズを定義します。これにより、小さなパーツの数を減らし、Too many parts エラーの可能性を減らします。 マージは、マージされたトータルパーツサイズを2倍にすることでディスクスペースを予約します。したがって、ディスク空きスペースが少ない場合、フリースペースは多くありますが、このスペースは進行中の大規模なマージによって既に予約されており、他のマージを開始できないため、小さなパーツの数が増え続けます。

merge_max_block_size

メモリに読み込まれるパーツからの行数。

可能な値:

  • 任意の正の整数。

デフォルト値: 8192

マージが merge_max_block_size 行単位のブロックで行を読み取って、マージおよび新しいパーツに書き込みます。読み取りブロックはRAM内に配置されるため、merge_max_block_size はマージのために必要とされるRAMのサイズに影響を与えます。このため、マージは非常に広い行を持つテーブルに対して大量のRAMを消費する可能性があります平均行サイズが100kbの場合、10個のパーツをマージするとき、(100kb * 10 * 8192) = 約 8GBのRAMmerge_max_block_size を減少させることによって、必要とされるRAMの量を減少させることができますが、マージを遅くします。

number_of_free_entries_in_pool_to_lower_max_size_of_merge

プール(またはレプリケートされたキュー)に指定された数値以下の空きエントリがある場合、処理する最大マージサイズを縮小し始めます(もしくはキューに投入します)。 これは長時間実行されるマージでプールを埋め尽くさないように、小さなマージを処理させるためです。

可能な値:

  • 任意の正の整数。

デフォルト値: 8

number_of_free_entries_in_pool_to_execute_mutation

プールに指定された数値以下の空きエントリがある場合、パーツの変異を実行しません。 これは通常のマージのための空きスレッドを残すため、"パーツが多すぎる"のを避けるためです。

可能な値:

  • 任意の正の整数。

デフォルト値: 20

使用方法

number_of_free_entries_in_pool_to_execute_mutation の設定値は background_pool_size * background_merges_mutations_concurrency_ratio の値未満である必要があります。そうでない場合、ClickHouse は例外をスローします。

max_part_loading_threads

ClickHouse が起動する際にパーツを読み込む最大スレッド数。

可能な値:

  • 任意の正の整数。

デフォルト値: 自動CPUコア数

起動時、ClickHouse はすべてのテーブルのすべてのパーツを読み取ります(パーツのメタデータを持つファイルを読み取る)し、メモリにすべてのパーツのリストを作成します。このプロセスは、パーツの数が多いシステムでは時間がかかることがあり、max_part_loading_threads を増やすことにより、このプロセスを短縮することができますこの処理がCPUとディスクI/Oによって制約されていない場合

max_partitions_to_read

一つのクエリでアクセスできる最大パーティション数を制限します。

テーブル作成時に指定した設定値はクエリレベルの設定で上書きできます。

可能な値:

  • 任意の正の整数。

デフォルト値: -1無制限

また、クエリ複雑性設定 max_partitions_to_read をクエリ / セッション / プロファイルレベルで指定できます。

min_age_to_force_merge_seconds

すべてのパートが min_age_to_force_merge_seconds の値より古い場合にパーツをマージします。

可能な値:

  • 正の整数。

デフォルト値: 0 — 無効。

min_age_to_force_merge_on_partition_only

min_age_to_force_merge_seconds をパーティション全体にのみ適用し、部分セットには適用しないかどうか。

可能な値:

  • true, false

デフォルト値: false

number_of_free_entries_in_pool_to_execute_optimize_entire_partition

プールに指定された数よりも少ない空きエントリがある場合、バックグラウンドでパーティション全体を最適化する操作を実行しません(min_age_to_force_merge_seconds を設定し、min_age_to_force_merge_on_partition_only を有効にした場合に生成されるタスク)。これにより通常のマージ用の空きスレッドを残し、"パーツが多すぎる"のを避けるためです。

可能な値:

  • 正の整数。

デフォルト値: 25

number_of_free_entries_in_pool_to_execute_optimize_entire_partition 設定の値は background_pool_size * background_merges_mutations_concurrency_ratio の値より少なくする必要があります。そうでない場合、ClickHouse は例外をスローします。

allow_floating_point_partition_key

パーティションキーとして浮動小数点数を許可するかどうかを設定します。

可能な値:

  • 0 — 浮動小数点パーティションキーを許可しない。
  • 1 — 浮動小数点パーティションキーを許可する。

デフォルト値: 0.

check_sample_column_is_correct

テーブル作成時にサンプリング用のカラムまたはサンプリング式のデータタイプが正しいかどうかを確認するチェックを有効にします。データタイプは、UInt8UInt16UInt32UInt64 のいずれかの符号なし 整数型でなければなりません。

可能な値:

  • true — チェックが有効です。
  • false — テーブル作成時のチェックが無効です。

デフォルト値: true.

デフォルトでは、ClickHouse サーバはテーブル作成時にサンプリング用のカラムまたはサンプリング式のデータタイプをチェックします。すでに不正なサンプリング式を持つテーブルがあり、サーバが起動中に例外を発生させたくない場合は check_sample_column_is_correctfalse に設定してください。

min_bytes_to_rebalance_partition_over_jbod

新しい大型パーツをボリュームディスク JBOD 上に分散させる際のバランシングを有効にするための最小バイト数を設定します。

可能な値:

  • 正の整数。
  • 0 — バランシングが無効です。

デフォルト値: 0.

使用例

min_bytes_to_rebalance_partition_over_jbod 設定の値は max_bytes_to_merge_at_max_space_in_pool / 1024 の値より多くなければなりません。そうでない場合、 ClickHouse は例外をスローします。

detach_not_byte_identical_parts

マージまたは変異後、他のレプリカのデータパーツとバイト単位で一致しない場合に、データパーツをデタッチするかどうかを設定します。無効な場合、データパーツは削除されます。この設定を有効にすると、後でそのようなパーツを分析することができます。

この設定は、データレプリケーションが有効な MergeTree テーブルに適用されます。

可能な値:

  • 0 — パーツは削除されます。
  • 1 — パーツはデタッチされます。

デフォルト値: 0.

merge_tree_clear_old_temporary_directories_interval_seconds

古い一時ディレクトリのクリーンアップを実行するための秒単位での間隔をClickHouseに設定します。

可能な値:

  • 任意の正の整数。

デフォルト値: 60 秒。

merge_tree_clear_old_parts_interval_seconds

古いパーツ、WAL、および変異のクリーンアップを実行するための秒単位での間隔をClickHouseに設定します。

可能な値:

  • 任意の正の整数。

デフォルト値: 1 秒。

max_concurrent_queries

MergeTree テーブルに関連する最大同時実行クエリ数。クエリは他の max_concurrent_queries 設定でも制限されます。

可能な値:

  • 正の整数。
  • 0 — 制限なし。

デフォルト値: 0(無制限)。

<max_concurrent_queries>50</max_concurrent_queries>

min_marks_to_honor_max_concurrent_queries

クエリが max_concurrent_queries 設定を適用できるようにするために読み取る必要のある最小マーク数。クエリは他の max_concurrent_queries 設定でも制限されることに注意してください。

可能な値:

  • 正の整数。
  • 0 — 無効(max_concurrent_queries 制限はクエリには適用されません)。

デフォルト値: 0(制限は適用されません)。

<min_marks_to_honor_max_concurrent_queries>10</min_marks_to_honor_max_concurrent_queries>

ratio_of_defaults_for_sparse_serialization

カラム内の *all 値に対する default 値の比率の最小限を設定します。この値を設定することで、カラムがスパースなシリアライゼーションを使用して保存されます。

カラムがスパースほとんどゼロを含むの場合、ClickHouse はそれをスパースな形式でエンコードすることができ、計算が自動的に最適化されます。これは、クエリ中にデータが完全に展開される必要がないためです。スパースなシリアライゼーションを有効にするためには、ratio_of_defaults_for_sparse_serialization 設定を 1.0 未満に定義します。値が 1.0 以上の場合、通常の完全シリアライゼーションを使用して常に書き込みが行われます。

可能な値:

  • 0 と 1 の間の浮動小数点数、スパースなシリアライゼーションを有効にする
  • 1.0(またはそれ以上)、スパースなシリアライゼーションを使用したくない場合

デフォルト値: 0.9375

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

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_tables カラムがディスク上でより少ないストレージスペースを使用していることに注意してください。

SELECT table, name, data_compressed_bytes, data_uncompressed_bytes FROM system.columns
WHERE table LIKE 'my_%_table';
┌─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 カラムを表示します。

SELECT column, serialization_kind FROM system.parts_columns
WHERE table LIKE 'my_sparse_table';

スパースなシリアライゼーションを使用してストレージされた s の部分を見ることができます。

┌─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             │
└────────┴────────────────────┘

replace_long_file_name_to_hash

カラムのファイル名が max_file_name_length バイトを超える場合、SipHash128 に置き換えます。デフォルト値: false.

max_file_name_length

ハッシュを適用せずに元のままにしておくファイル名の最大長。replace_long_file_name_to_hash が有効になっている場合のみ影響します。この設定の値はファイル拡張子の長さを含みません。したがって、ファイルシステムのエラーを避けるために、通常 255 バイト以下の最大ファイル名長よりもある程度の余裕を持って設定することをお勧めします。デフォルト値: 127。

allow_experimental_block_number_column

マージにおいて仮想カラム _block_number を永続化します。

デフォルト値: false.

exclude_deleted_rows_for_part_size_in_merge

有効にすると、DELETE FROM を使用して削除された行を除外して、データパーツの実際の推定サイズを使用してパーツを選択してマージを行います。この動作は、この設定が有効化された DELETE FROM の影響を受けるデータパーツにのみトリガーされることに注意してください。

可能な値:

  • true, false

デフォルト値: false

関連項目

load_existing_rows_count_for_old_parts

exclude_deleted_rows_for_part_size_in_merge とともに有効にされている場合、既存のデータパーツの削除された行数がテーブルの起動時に計算されます。これは、テーブルの起動時に遅延が発生する可能性があります。

可能な値:

  • true, false

デフォルト値: false

関連項目

use_compact_variant_discriminators_serialization

Variant データ型でのバイナリシリアライゼーションのディスクリミネータのためのコンパクトモードを有効化します。 このモードでは、大多数が1つのバリアントまたは多くのNULL値がある場合に、パーツにディスクリミネータが保存されるために大幅にメモリを節約できます。

デフォルト値: true

merge_workload

マージおよび他のワークロード間でのリソース利用と共有を調整するために使用されます。特定のテーブルのバックグラウンドマージのための workload 設定値として使用します。指定されていない場合(空の文字列)、サーバー設定 merge_workload が代わりに使用されます。

デフォルト値: 空の文字列

関連項目

mutation_workload

変異および他のワークロード間でのリソース利用と共有を調整するために使用されます。特定のテーブルのバックグラウンド変異のための workload 設定値として使用します。指定されていない場合(空の文字列)、サーバー設定 mutation_workload が代わりに使用されます。

デフォルト値: 空の文字列

関連項目

optimize_row_order

新しく挿入されたテーブルパートの圧縮性を向上させるために行順序を最適化すべきかどうかを制御します。

これは通常の MergeTree エンジン テーブルにのみ影響します。専用の MergeTree エンジンテーブル(例: CollapsingMergeTreeには影響しません。

MergeTree テーブルは(任意で)圧縮コーデックを使用して圧縮されます。 LZ4 や ZSTD などの一般的な圧縮コーデックは、データがパターンを示す場合、最大の圧縮率を達成します。 同じ値の長く続くランは通常非常によく圧縮されます。

この設定が有効になっている場合、ClickHouse は新しく挿入されたパーツ内のデータを、テーブルの新しいパーツのカラム全体で等値ランの数を最小化するような行順序で保存しようとします。 言い換えれば、少ない数の等値ランは個々のランが長くなり、よく圧縮されることを意味します。

最適な行順序を見つけることは計算上不可能NPハードです。 そのため、ClickHouse は依然として元の行順序よりも圧縮率を改善する行順序を迅速に見つけるためにヒューリスティックスを使用します。

行順序を見つけるためのヒューリスティックス

SQLでは、異なる行順序の同じテーブルテーブルパートが同等であると見なされるため、テーブルまたはテーブルパートに対して自由に行をシャッフルすることが一般に可能です。

テーブルの主キーが定義されている場合、この行のシャッフルの自由度は制限されます。 ClickHouse では、主キー C1, C2, ..., CN は、テーブルの行により C1, C2, ..., Cn のカラムでソートされていることが求められます(クラスタインデックス)。 その結果、プライマリキーカラムと同じ値を持つ行、すなわち行の"等値クラス"内でのみ行のシャッフルが許可されます。 直感的には、高カードのプライマリキー、例: DateTime64 タイムスタンプカラムを含む主キーは多数の小さな等値クラスを生じます。 それに対して、低カードのプライマリキーを持つテーブルは少数の大きな等値クラスを生成します。 主キーなしのテーブルは、すべての行を一つの等値クラスとして表現する極端なケースです。

等値クラスが少なく、大きいほど、行の再シャッフル時の自由度が高くなります。

それぞれの等値クラスにおける最適な行順序を見つけるヒューリスティックスは、D. Lemire, O. KaserがReordering columns for smaller indexesで提案し、主キー以外のカラムの昇順で行を並べ替えます。 次の3つの手順を実行します。

  1. 主キーカラムの行値に基づいてすべての等値クラスを見つけます。
  2. 各等値クラスに対して、主キー以外のカラムのカーディナリティを計算(通常は推定)します。
  3. 各等値クラスに対して、主キー以外のカラムのカーディナリティの昇順で行を並べ替えます。

有効にすると、新しいデータの行順序を分析および最適化するための追加のCPUコストが発生します。 INSERTの実行は、データ特性に応じて30〜50長くなることが予想されます。 LZ4 または ZSTD の圧縮率は平均20〜40改善します。

この設定は、低カードの主キーを持つテーブルに最適です。すなわち、少数の異なる主キー値を持つテーブルです。 高カードの主キー、例: DateTime64 型のタイムスタンプカラムを含む主キーは、この設定からの利益を期待されません。

lightweight_mutation_projection_mode

デフォルトでは、論理削除の DELETE は、プロジェクションを持つテーブルには機能しません。これは、プロジェクション中の行が DELETE 操作によって影響を受ける可能性があるためです。したがって、デフォルト値は throw となります。 しかし、このオプションにより動作を変更できます。drop または rebuild のいずれかの値を使用した場合、削除がプロジェクションに伴います。drop はプロジェクションを削除するため、プロジェクションが削除されたがために現在のクエリで高速ですが、将来のクエリで遅くなる可能性があります。 rebuild はプロジェクションを再構築し、現在のクエリのパフォーマンスに影響を与えますが、将来のクエリのスピードアップが期待されます。良いことは、これらのオプションは部分レベルでのみ動作するため、 タッチしない部分のプロジェクションは、削除や再構築のアクションをトリガーすることなくそのまま残ります。

可能な値:

  • throw, drop, rebuild

デフォルト値: throw

deduplicate_merge_projection_mode

非クラシック MergeTree で非クラシック MergeTree を持つテーブルのためにプロジェクションを作成することを許可するかどうか。無視するオプションは、純粋に互換性のためのもので、誤った回答をもたらす可能性があります。許可される場合、マージプロジェクションのアクション(削除または再構築)です。そのため、クラシック MergeTree はこの設定を無視します。 OPTIMIZE DEDUPLICATE も制御し、すべての MergeTree ファミリメンバーに影響を及ぼします。lightweight_mutation_projection_mode オプションと同様に、部分レベルです。

可能な値:

  • ignore, throw, drop, rebuild

デフォルト値: throw

min_free_disk_bytes_to_perform_insert

データを挿入するためにディスクスペースに空いているべき最小バイト数。利用可能なバイトが min_free_disk_bytes_to_throw_insert 未満の場合は例外がスローされ、挿入が実行されません。この設定は以下を念頭に置いています。

  • keep_free_space_bytes 設定を考慮します。
  • INSERT 操作によって書き込まれるデータ量は考慮しません。
  • 正の(ゼロでない)バイト数が指定された場合にのみチェックされます

可能な値:

  • 任意の正の整数。

デフォルト値: 0 バイト。

min_free_disk_bytes_to_perform_insertmin_free_disk_ratio_to_perform_insert の両方が指定されている場合、ClickHouse は空きメモリの大きさで入力を許可する値を考慮します。

min_free_disk_ratio_to_perform_insert

INSERT を実行するためのディスクスペースの最小の空き対合計比率。0と1の間の浮動小数点値である必要があります。この設定は以下を考慮します。

  • keep_free_space_bytes 設定を考慮します。
  • INSERT 操作によって書き込まれるデータ量は考慮しません。
  • 正の(ゼロでない)比率が指定された場合にのみチェックされます

可能な値:

  • 浮動小数点、0.0 - 1.0

デフォルト値: 0.0

min_free_disk_ratio_to_perform_insertmin_free_disk_bytes_to_perform_insert の両方が指定されている場合、ClickHouse は空きメモリの大きな部分で挿入を実行することを許可する値を考慮します。