system.predicate_statistics_log
ClickHouse Cloud でのクエリ実行
このシステムテーブルのデータは、ClickHouse Cloud の各ノードにローカルに格納されています。そのため、すべてのデータを包括的に確認するには、clusterAllReplicas 関数を使用する必要があります。詳細についてはこちらを参照してください。
説明
このテーブルには、MergeTree テーブルの読み込み時に収集されたサンプリング選択性統計が含まれます。このテーブルにデータが格納されるのは、predicate_statistics_sample_rate が 0 より大きい場合のみです。
このテーブルを使用すると、実際のワークロードにおいてユーザー述語がどの程度絞り込めているか、および主キーまたはスキップ索引によるフィルタリング後に残るグラニュール数を確認できます。このデータは、ワークロードに基づく索引およびプロジェクションの推奨のための入力として使用することを想定しています。
行の形式
1 つのクエリは、system.predicate_statistics_log に 2 種類の行を生成できます。
- Filter rows:
MergeTreeSelectProcessorの各 prewhere/filter ステップごとに出力されます。predicate_expression、input_rows、passed_rows、filter_selectivity、および述語全体に対応するtotal_input_rows、total_passed_rows、total_selectivityの各カラムに値が入ります。索引関連のカラムは空です。 - Index rows:
ReadFromMergeTreeの各 read ステップごとに出力されます。index_names、index_types、total_granules、granules_after、index_selectivitiesの各配列に値が入り、各索引ステージ (主キー、パーティション、スキップ索引) ごとに 1 つのエントリが格納されます。述語関連のカラムは空です。
同じクエリに対応する Filter rows と Index rows は同じ query_id と table を共有するため、両方が必要な場合は結合できます。
サンプリングとオーバーヘッド
サンプリングは predicate_statistics_sample_rate で制御されます。
0は収集を無効にします。1はすべてのクエリをサンプリングします。N > 1の場合、query_idの hash に基づいて、クエリのおよそ1 / Nがサンプリングされます。
値を小さくすると生成されるデータは増えますが、読み取りパスでの CPU 負荷が増し、システムログへの書き込みも多くなります。設定を有効にしたあと、行をすぐに反映させる必要がある場合は SYSTEM FLUSH LOGS を使用してください。
カラム
hostname(LowCardinality(String)) — クエリを実行したサーバーのホスト名。event_date(Date) — イベントの日付。event_time(DateTime) — このログエントリが書き込まれたタイムスタンプ。database(LowCardinality(String)) — 対象テーブルのデータベース名。table(LowCardinality(String)) — 対象テーブルのテーブル名。query_id(String) — query_log に関連付けるためのクエリ ID。predicate_expression(String) — この prewhere/filter ステップで処理されるフィルタ式全体 (ActionsDAG ダンプ) 。input_rows(UInt64) — この prewhere/filter ステップに入力される行数。passed_rows(UInt64) — この prewhere/filter ステップを通過した行数。filter_selectivity(Float64) — このステップの選択率: passed_rows / input_rows。total_input_rows(UInt64) — 最初の prewhere ステップに入力される行数 (グラニュールから読み取られた合計行数) 。total_passed_rows(UInt64) — すべての prewhere ステップを通過した行数 (クエリに渡される行数) 。total_selectivity(Float64) — 述語全体の選択率: total_passed_rows / total_input_rows。index_names(Array(LowCardinality(String))) — 適用された索引の名前 (例: ['PrimaryKey', 'idx_bf_status']) (索引の行のみ) 。index_types(Array(LowCardinality(String))) — 適用された索引の種類: PrimaryKey, Skip, MinMax, Partition (索引の行のみ) 。total_granules(Array(UInt64)) — 各索引ステージに入るグラニュール数 (索引の行のみ) 。granules_after(Array(UInt64)) — 各索引ステージ後に残るグラニュール数 (索引の行のみ) 。index_selectivities(Array(Float64)) — 索引ごとの選択率: granules_after / total_granules (索引の行のみ) 。