Как проверить, используется ли кэш запросов в моём запросе?
См. пример использования клиента ClickHouse и сервиса ClickHouse Cloud.
создайте таблицу query_cache_test
Использование клиента ClickHouse
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.заполните таблицу данными:
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.)включите трассировочные логи:
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.выполните запрос, указав, что нужно использовать кэш запросов (добавив SETTINGS use_query_cache=true к запросу):
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} \снова выполните тот же запрос:
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} \Теперь обратите внимание на различия в TRACE-журналах, связанных с QueryCache, в следующих случаях:
1-й запуск:
[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при втором выполнении:
[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При 1-м выполнении запись, как и ожидалось, не была найдена (No entry found for query SELECT...), поэтому ClickHouse сохранил (Stored result of query SELECT...) её для нас.
При 2-м выполнении запрос использовал кэш запросов, так как нашёл уже сохранённую запись (Entry found for query SELECT...).
Использование только SQL
Можно также проверить, используется ли кэш запросов, просто выполняя команды SQL и не просматривая трассировочные логи клиента ClickHouse:
для этого достаточно обратиться к соответствующим таблицам system:
clickhouse-cloud :) SELECT 1 SETTINGS use_query_cache=true;
SELECT 1
SETTINGS use_query_cache = 1
Query id: a5a078c7-61e5-4036-a6f0-4d602d5b72d2
┌В последних результатах мы видим 1 QueryCacheMisses при первом выполнении запроса SELECT 1 SETTINGS use_query_cache=true; и событие QueryCacheHits, связанное со вторым выполнением этого запроса.
Также имейте в виду, что максимальный размер одной записи кэша по умолчанию составляет 1048576 байт (= 1 MiB), а результаты по умолчанию хранятся в кэше только 60 секунд (например, вы можете использовать query_cache_ttl=300 в SETTINGS, чтобы результат запроса хранился в кэше 5 минут).
Более подробную информацию о кэше запросов ClickHouse можно найти здесь