max_bytes_before_external_group_by
GROUP BY 句を外部メモリで実行するかどうかを制御します。
(外部メモリでの GROUP BY を参照)
設定可能な値:
- 1 回の GROUP BY 操作で使用できる RAM の最大量 (バイト単位) 。
0— 外部メモリでのGROUP BYは無効。
GROUP BY 操作中のメモリ使用量がこのしきい値 (バイト単位) を超えると、
「外部集約」モードが有効になり、中間データがディスクに書き出されます。推奨値は、利用可能なシステムメモリの半分です。
max_bytes_before_external_join
join_algorithm が hash、parallel_hash、default、または auto の場合、右側のデータがこのバイト数を超えると、ディスクへのスピルを有効にするためにハッシュ結合は自動的に Grace Hash Join に変換されます。0 (デフォルト) に設定すると、この絶対バイトしきい値は無効になりますが、max_bytes_ratio_before_external_join (デフォルトは 0.5) によって自動スピルが引き続き発生する可能性があります。自動スピルを完全に無効にするには、両方を 0 に設定してください。これにより、JOIN 最適化による順序どおりの読み取りは行えなくなります。
max_bytes_before_external_sort
ORDER BY 句を外部メモリで実行するかどうかを設定します。ORDER BY の実装の詳細を参照してください。
ORDER BY 操作中のメモリ使用量がこのしきい値をバイト単位で超えると、「外部ソート」モード (中間データをディスクに書き出す) が有効になります。
設定可能な値:
- 1 回の ORDER BY 操作で使用できる RAM の最大量 (バイト単位) 。 推奨値は、使用可能なシステムメモリの半分です
0— 外部メモリでのORDER BYは無効です。
max_bytes_before_remerge_sort
max_bytes_for_lazy_final
max_bytes_in_distinct
max_bytes_in_join
join_algorithm によって異なります。アルゴリズムごとの動作 (spill、再パーティション化、切り替え、または
join_overflow_mode に応じた throw/break) については、
その設定を参照してください。
設定可能な値:
- 正の整数。
- 0 — メモリ制御は無効です。
max_bytes_in_set
max_bytes_ratio_before_external_group_by
GROUP BY に使用できる利用可能メモリの割合です。しきい値に達すると、
集約には外部メモリが使用されます。
たとえば 0.6 に設定すると、GROUP BY は実行開始時点で利用可能メモリ
(server/user/merges に割り当てられたメモリ) の 60% まで使用でき、
それ以降は外部集約を使用し始めます。
max_bytes_ratio_before_external_join
JOIN に使用できる利用可能メモリの比率です。この値に達すると、ハッシュ結合は Grace Hash Join に変換され、右側のデータがディスクにスピルされます。
たとえば 0.6 に設定すると、JOIN は実行開始時に、右側のハッシュテーブルに対して利用可能メモリ (server/user/merges 用) の 60% まで使用できます。その後はディスクへのスピルが開始されます。
max_bytes_before_external_join と max_bytes_ratio_before_external_join の両方が設定されている場合は、結果として小さい方のしきい値が使用されます。比率が 0 の場合は、絶対値の設定のみが適用されます。
join_algorithm が hash、parallel_hash、default、auto のいずれかで、かつ一時データパスが設定されている場合にのみ効果があります。
max_bytes_ratio_before_external_sort
ORDER BY に使用できる利用可能メモリの比率です。この値に達すると、外部ソートが使用されます。
たとえば 0.6 に設定すると、ORDER BY は実行開始時に利用可能メモリ (server/user/merges) の 60% まで使用できます。それを超えると、外部ソートの使用が開始されます。
なお、max_bytes_before_external_sort は引き続き適用されるため、ディスクへのスピルが行われるのは、ソート対象のブロックが max_bytes_before_external_sort より大きい場合だけです。
max_bytes_to_read
max_bytes_to_read_leaf
max_bytes_to_read=150 が設定されていると、
合計で 200 バイトになるため失敗します。一方、max_bytes_to_read_leaf=150 を
設定したクエリは成功します。これは、リーフノードでは最大 100 バイトしか
読み取られないためです。
この制限は、処理されるデータの各 chunk ごとにチェックされます。
この設定は、
prefer_localhost_replica=1 と併用すると不安定です。max_bytes_to_sort
sort_overflow_mode によって
決まります。既定では throw に設定されています。