Comment puis-je vérifier que le cache de requêtes est utilisé pour ma requête ?
Voir cet exemple avec clickhouse client et ClickHouse Cloud service.
créez une table query_cache_test
Utiliser 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.remplissez la table avec des données :
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.)activez le journal de trace :
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.exécutez une requête en demandant l’utilisation du cache de requêtes (en ajoutant SETTINGS use_query_cache=true à la requête) :
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} \exécutez à nouveau la même requête :
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} \Observez maintenant les différences entre les logs TRACE liés à QueryCache,
1re exécution :
[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` SETTINGSlors de la 2e exécution :
[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` SETTINGSLors de la 1re exécution, aucune entrée n’a logiquement été trouvée (No entry found for query SELECT...), donc ClickHouse a bien stocké (Stored result of query SELECT...) l’entrée pour nous.
Lors de la 2e exécution, la requête a utilisé le cache de requêtes, car elle a trouvé l’entrée déjà stockée (Entry found for query SELECT...).
En utilisant uniquement SQL
En exécutant simplement des commandes SQL, sans consulter les journaux de trace du clickhouse client,
il est également possible de vérifier si le cache de requêtes est utilisé en consultant les tables system pertinentes :
clickhouse-cloud :) SELECT 1 SETTINGS use_query_cache=true;
SELECT 1
SETTINGS use_query_cache = 1
Query id: a5a078c7-61e5-4036-a6f0-4d602d5b72d2
┌Dans les derniers résultats, nous voyons 1 QueryCacheMisses lors de la première exécution de la requête SELECT 1 SETTINGS use_query_cache=true;, ainsi qu’un événement QueryCacheHits lié à sa deuxième exécution.
Gardez également à l’esprit que la taille maximale par défaut d’une entrée de cache est de 1048576 octets (= 1 MiB) et que, par défaut, les résultats ne sont conservés dans le cache que pendant 60 secondes (vous pouvez par exemple utiliser query_cache_ttl=300 dans SETTINGS pour conserver à la place le résultat d’une requête dans le cache pendant 5 minutes).
Vous trouverez des informations plus détaillées sur le cache de requêtes de ClickHouse ici