Pular para o conteúdo principal
Consultas no ClickHouse CloudOs dados nesta tabela de sistema são mantidos localmente em cada nó do ClickHouse Cloud. Portanto, para obter uma visão completa de todos os dados, é necessário usar a função clusterAllReplicas. Consulte aqui para mais detalhes.

Descrição

Contém estatísticas amostrais de seletividade coletadas durante a leitura de tabelas MergeTree. A tabela é preenchida somente quando predicate_statistics_sample_rate é maior que 0. Use esta tabela para inspecionar quão seletivos são os predicados definidos pelo usuário em cargas de trabalho reais e quantos grânulos permanecem após a filtragem por chave primária ou índice de salto. Esses dados servem como entrada para recomendações de índices e projeções orientadas pela carga de trabalho.

Estruturas de linha

Uma única consulta pode produzir dois tipos de linhas em system.predicate_statistics_log:
  • Linhas de filtro, emitidas por etapa de prewhere/filter em MergeTreeSelectProcessor. Elas preenchem predicate_expression, input_rows, passed_rows, filter_selectivity e as colunas do predicado completo total_input_rows, total_passed_rows e total_selectivity. As colunas relacionadas a índices ficam vazias.
  • Linhas de índice, emitidas por etapa de leitura em ReadFromMergeTree. Elas preenchem os arrays index_names, index_types, total_granules, granules_after e index_selectivities, com uma entrada por estágio de índice (chave primária, partição, índice de salto). As colunas relacionadas a predicados ficam vazias.
As linhas de filtro e as linhas de índice da mesma consulta compartilham o mesmo query_id e a mesma table, portanto podem ser combinadas quando ambas forem necessárias.

Amostragem e sobrecarga

A amostragem é controlada por predicate_statistics_sample_rate:
  • 0 desativa a coleta.
  • 1 amostra todas as consultas.
  • N > 1 amostra aproximadamente 1 / N das consultas, com base no hash de query_id.
Valores menores geram mais dados, mas aumentam o trabalho de CPU no caminho de leitura e o número de gravações nos logs do sistema. Após habilitar a configuração, use SYSTEM FLUSH LOGS se precisar que as linhas apareçam imediatamente.

Colunas

  • hostname (LowCardinality(String)) — Hostname do servidor que executa a consulta.
  • event_date (Date) — Data do evento.
  • event_time (DateTime) — Timestamp de quando esta entrada de log foi registrada.
  • database (LowCardinality(String)) — Nome do banco de dados da tabela de destino.
  • table (LowCardinality(String)) — Nome da tabela de destino.
  • query_id (String) — ID da consulta para vinculação ao query_log.
  • predicate_expression (String) — Expressão de filtro completa processada por esta etapa de prewhere/filtro (dump do ActionsDAG).
  • input_rows (UInt64) — Linhas que entram nesta etapa de prewhere/filtro.
  • passed_rows (UInt64) — Linhas que passam por esta etapa de prewhere/filtro.
  • filter_selectivity (Float64) — Seletividade desta etapa: passed_rows / input_rows.
  • total_input_rows (UInt64) — Linhas que entram na primeira etapa de prewhere (total de linhas lidas dos grânulos).
  • total_passed_rows (UInt64) — Linhas que passam por todas as etapas de prewhere (linhas entregues à consulta).
  • total_selectivity (Float64) — Seletividade de todo o predicado: total_passed_rows / total_input_rows.
  • index_names (Array(LowCardinality(String))) — Nomes dos índices aplicados, por exemplo [‘PrimaryKey’, ‘idx_bf_status’] (somente linhas de índice).
  • index_types (Array(LowCardinality(String))) — Tipos de índices aplicados: PrimaryKey, Skip, MinMax, Partition (somente linhas de índice).
  • total_granules (Array(UInt64)) — Grânulos que entram em cada estágio de índice (somente linhas de índice).
  • granules_after (Array(UInt64)) — Grânulos restantes após cada estágio de índice (somente linhas de índice).
  • index_selectivities (Array(Float64)) — Seletividade de cada índice: granules_after / total_granules (somente linhas de índice).

Exemplo

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;

Veja também

Última modificação em 10 de junho de 2026