Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Cómo verificar el uso de la caché de consultas en ClickHouse

¿Cómo puedo comprobar que la caché de consultas se está usando en mi consulta?

Consulte este ejemplo con clickhouse client y un servicio de ClickHouse Cloud.

cree una tabla query_cache_test

Uso del clickhouse client

clickhouse-cloud :) CREATE TABLE query_cache_test (name String, age UInt8) ENGINE =MergeTree ORDER BY name

CREATE TABLE query_cache_test
(
    `name` String,
    `age` UInt8
)
ENGINE = MergeTree
ORDER BY name

Query id: 81c54f09-7de4-48ec-916f-c7c304a46931

Ok.

0 rows in set. Elapsed: 0.343 sec.

llena la tabla con algunos datos:

clickhouse-cloud :) INSERT INTO query_cache_test SELECT * FROM generateRandom('name String, age UInt8',1,1) LIMIT 100000;

INSERT INTO query_cache_test SELECT *
FROM generateRandom('name String, age UInt8', 1, 1)
LIMIT 100000

Query id: 90369105-bd67-494c-bdaf-d90dbfb6def9

Ok.

0 rows in set. Elapsed: 0.173 sec. Processed 327.05 thousand rows, 3.43 MB (1.89 million rows/s., 19.86 MB/s.)

habilite los logs de traza:

clickhouse-cloud :) SET send_logs_level = 'trace'

SET send_logs_level = 'trace'

Query id: d65490b0-7960-4a85-a343-787e70e5e293

Ok.

0 rows in set. Elapsed: 0.134 sec.

ejecute una consulta para usar la caché de consultas (añadiendo SETTINGS use_query_cache=true a la consulta):

clickhouse-cloud :) SELECT name FROM query_cache_test WHERE age > 1000 FORMAT Null SETTINGS use_query_cache=true;

SELECT name
FROM query_cache_test
WHERE age > 1000
FORMAT `Null`
SETTINGS use_query_cache = 1

Query id: 3754a7fd-b786-47c1-a258-dfbc75e35a04

[c-red-qc-36-server-0] 2023.05.29 12:06:10.542408 [ 454 ] {3754a7fd-b786-47c1-a258-dfbc75e35a04} \

vuelve a ejecutar la misma consulta:

clickhouse-cloud :) SELECT name FROM query_cache_test WHERE age > 1000 FORMAT Null SETTINGS use_query_cache=true;

SELECT name
FROM query_cache_test
WHERE age > 1000
FORMAT `Null`
SETTINGS use_query_cache = 1

Query id: a047527c-9d55-4e6b-9747-0ccad8787515

[c-red-qc-36-server-0] 2023.05.29 12:06:17.931007 [ 454 ] {a047527c-9d55-4e6b-9747-0ccad8787515} \

Observe ahora las diferencias entre los registros TRACE relacionados con QueryCache:

1.ª ejecución:

[c-red-qc-36-server-0] 2023.05.29 12:06:10.543559 [ 454 ] {3754a7fd-b786-47c1-a258-dfbc75e35a04} \<Trace\> QueryCache: No entry found for query SELECT name FROM query_cache_test  WHERE age > 1000 FORMAT `Null` SETTINGS
[c-red-qc-36-server-0] 2023.05.29 12:06:10.547760 [ 454 ] {3754a7fd-b786-47c1-a258-dfbc75e35a04} \<Trace\> QueryCache: Stored result of query SELECT name FROM query_cache_test  WHERE age > 1000 FORMAT `Null` SETTINGS

en la segunda ejecución:

[c-red-qc-36-server-0] 2023.05.29 12:06:17.932043 [ 454 ] {a047527c-9d55-4e6b-9747-0ccad8787515} \<Trace\> QueryCache: Entry found for query SELECT name FROM query_cache_test  WHERE age > 1000 FORMAT `Null` SETTINGS

En la 1.ª ejecución, claramente no se encontró ninguna entrada (No entry found for query SELECT...), así que ClickHouse almacenó (Stored result of query SELECT...) la entrada.

En la 2.ª ejecución, la consulta utilizó la caché de consultas, ya que encontró la entrada ya almacenada (Entry found for query SELECT...).

Solo con SQL

Simplemente ejecutando comandos SQL, sin inspeccionar los registros de nivel trace de clickhouse client,

también es posible validar si se está utilizando la caché de consultas comprobando las tablas system correspondientes:

clickhouse-cloud :) SELECT 1 SETTINGS use_query_cache=true;

SELECT 1
SETTINGS use_query_cache = 1

Query id: a5a078c7-61e5-4036-a6f0-4d602d5b72d2

En los resultados más recientes vemos 1 QueryCacheMisses correspondiente a la primera ejecución de la consulta SELECT 1 SETTINGS use_query_cache=true; y un evento QueryCacheHits asociado a la segunda ejecución de la consulta.

Tenga en cuenta también que el tamaño máximo predeterminado de una entrada de caché es de 1048576 bytes (= 1 MiB) y que, de forma predeterminada, los resultados se almacenan en caché solo durante 60 segundos (por ejemplo, puede usar query_cache_ttl=300 en SETTINGS para que el resultado de una consulta se almacene en caché durante 5 minutos).

Puede encontrar información más detallada sobre la caché de consultas de ClickHouse aquí

Navigation