Перейти к основному содержанию
Запросы в ClickHouse CloudДанные в этой системной таблице хранятся локально на каждом узле ClickHouse Cloud. Поэтому, чтобы получить полное представление обо всех данных, требуется функция clusterAllReplicas. Дополнительные сведения см. здесь.

Описание

Содержит статистику селективности по выборке, собранную при чтении из таблиц MergeTree. Таблица заполняется только тогда, когда predicate_statistics_sample_rate больше 0. Используйте эту таблицу, чтобы оценить, насколько селективны пользовательские предикаты в реальных рабочих нагрузках и сколько гранул остается после фильтрации по первичному ключу или индексу пропуска данных. Эти данные предназначены для выработки рекомендаций по индексам и проекциям на основе рабочих нагрузок.

Виды строк

Один запрос может порождать два вида строк в system.predicate_statistics_log:
  • Строки фильтров, создаваемые на каждом шаге prewhere/filter в MergeTreeSelectProcessor. В них заполняются predicate_expression, input_rows, passed_rows, filter_selectivity, а также столбцы, относящиеся ко всему предикату: total_input_rows, total_passed_rows, total_selectivity. Столбцы, связанные с индексами, остаются пустыми.
  • Строки индексов, создаваемые на каждом шаге чтения в ReadFromMergeTree. В них заполняются массивы index_names, index_types, total_granules, granules_after и index_selectivities — по одной записи на каждый этап индексации (primary key, партиция, индекс пропуска данных). Столбцы, связанные с предикатами, остаются пустыми.
Строки фильтров и строки индексов для одного и того же запроса имеют одинаковые query_id и table, поэтому при необходимости их можно объединить с помощью JOIN.

Сэмплирование и накладные расходы

Сэмплирование управляется параметром predicate_statistics_sample_rate:
  • 0 отключает сбор.
  • 1 включает сэмплирование каждого запроса.
  • N > 1 включает сэмплирование примерно 1 / N запросов по хешу query_id.
Меньшие значения дают больше данных, но увеличивают нагрузку на CPU при чтении и число записей в системном журнале. После включения этой настройки используйте SYSTEM FLUSH LOGS, если нужно, чтобы строки появились сразу.

Столбцы

  • hostname (LowCardinality(String)) — Имя хоста сервера, выполняющего запрос.
  • event_date (Date) — Дата события.
  • event_time (DateTime) — Временная метка, когда была сделана эта запись в журнале.
  • database (LowCardinality(String)) — Имя базы данных целевой таблицы.
  • table (LowCardinality(String)) — Имя целевой таблицы.
  • query_id (String) — Идентификатор запроса для связи с query_log.
  • 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 (только для строк индексов).

Пример

SET predicate_statistics_sample_rate = 1;

SELECT *
FROM hits
WHERE URL LIKE '%/product/%' AND EventDate >= today() - 7
FORMAT Null;

SYSTEM FLUSH LOGS predicate_statistics_log;

SELECT
    query_id,
    predicate_expression,
    round(filter_selectivity, 3) AS step_selectivity,
    round(total_selectivity, 3) AS query_selectivity,
    index_names,
    index_selectivities
FROM system.predicate_statistics_log
WHERE table = 'hits'
ORDER BY event_time DESC
LIMIT 10;

См. также

Последнее изменение 10 июня 2026 г.