高い同時実行性を可能にする要素
個々のクエリを高速に実行することが、高い QPS の基盤となります。各クエリの処理量が少ないほど、サーバーが同時に実行できるクエリ数は増えます。クエリごとの処理を削減する主な機能は次のとおりです。- クエリに一致しないデータの読み取りをスキップする、MergeTree テーブルエンジンファミリーのスパースプライマリ索引。
- 繰り返し実行される
SELECTクエリに対してキャッシュ済みの結果を直接返す、クエリキャッシュなどのキャッシュ。 - 挿入時にデータを事前計算し、ClickHouse が自動的に選択できるプロジェクションと、事前計算された結果を別のターゲットテーブルに格納し、クエリから直接読み取れるようにするmaterialized view。
同時実行数の制御と制限
デフォルトでは、ClickHouse OSS は同時実行クエリ数を制限しません。ClickHouse Cloud では、max_concurrent_queries_for_all_users はデフォルトで 1000 に設定されています。制限は複数のレベルで設定できます。
max_concurrent_queriesは、サーバーで同時に実行されるクエリの合計数を制限します。max_concurrent_insert_queriesとmax_concurrent_select_queriesは、それぞれINSERTクエリとSELECTクエリに同じ制限を適用します。いずれもデフォルトは0(無制限) です。max_concurrent_queries_for_userとmax_concurrent_queries_for_all_usersは、ユーザーごと、または全ユーザーを対象に同時実行数を制限します。
ワークロードの分離
同時実行されるワークロード同士が干渉しないよう、ClickHouse には次の機能が用意されています。- ワークロード間での CPU、メモリ、I/O の共有を制御するワークロードスケジューリング。
- 一定期間内のユーザーごとのリソース使用量を制限するクォータ。
- 個々のクエリによる過剰なリソース消費を防ぐクエリ複雑度の制限。
- ユーザーごとにクエリ可能な範囲を制限する組み込みのロールベースアクセス制御。