max_threads
WHERE による絞り込み、GROUP BY の事前集約を並列に実行できる場合は、‘max_threads’ が使用されます。
LIMIT によってすぐに完了するクエリでは、‘max_threads’ をより小さく設定できます。
たとえば、必要なエントリがすべての block に含まれていて max_threads = 8 の場合、1 つだけ読めば十分であっても 8 個の block が取得されます。
max_threads の値が小さいほど、消費メモリは少なくなります。
max_threads 設定のデフォルト値は、ClickHouse で利用可能なハードウェアスレッド数 (CPU コア数) と同じです。
特例として、32 CPU コア未満で SMT (例: Intel HyperThreading) を備えた x86 プロセッサでは、ClickHouse はデフォルトで論理コア数 (= 物理コア数 x 2) を使用します。
SMT (例: Intel HyperThreading) がない場合、これは CPU コア数に対応します。
ClickHouse Cloud ユーザーの場合、デフォルト値は auto(N) と表示されます。ここで N は、2vCPU/8GiB、4vCPU/16GiB など、サービスの vCPU サイズに対応します。
すべてのサービスサイズの一覧は、Cloud Console の Settings タブを参照してください。
max_threads_for_indexes
max_threads_min_free_memory_per_thread
max_threads を引き下げて、メモリ制限に達する可能性が高い高並列のクエリが開始されるのを防ぎます。
空きメモリは、サーバーの max_server_memory_usage から、グローバルメモリトラッカーで現在追跡されているメモリ使用量を差し引いて算出されます。この空きメモリが max_threads にこの値を掛けた値より小さい場合、max_threads は N * value <= free_memory を満たす最大の N まで引き下げられ、最小値は 1 です。
この制限を無効にするには、0 に設定します。
たとえば、デフォルト値の 1 GiB で空きメモリが 32 GiB の場合、max_threads の上限は 32 になります。空きメモリが 1 GiB の場合は 1 まで下がります。
この設定は、読み取り側の並列度 (SELECT、UNION、INTERSECT/EXCEPT、および INSERT ... SELECT の SELECT 側) に適用されます。書き込み側については、max_insert_threads_min_free_memory_per_thread を参照してください。