Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

ClickHouseでクエリキャッシュが使用されているかを確認する方法

クエリで クエリキャッシュ が使用されているか確認するにはどうすればよいですか?

clickhouse client と ClickHouse Cloud service を使用する次の例を参照してください。

query_cache_test テーブルを作成します

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.

テーブルにいくつかのデータを挿入します:

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} \

それでは、QueryCache に関連する TRACE ログの違いを見てみましょう。

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

2回目の実行時:

[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だけを使う

clickhouse client のトレースログを確認しなくても、SQLコマンドを実行するだけで、

関連する system テーブルを確認して、クエリキャッシュ が使用されているかどうかを検証できます:

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

SELECT 1
SETTINGS use_query_cache = 1

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

直前の結果では、クエリ SELECT 1 SETTINGS use_query_cache=true; を初めて実行した際に QueryCacheMisses が 1 回発生し、2 回目の実行に対応する QueryCacheHits イベントも確認できます。

また、デフォルトの cache の最大エントリサイズは 1048576 バイト (= 1 MiB) で、結果はデフォルトでは 60 秒間しか cache に保存されない点にも注意してください (たとえば SETTINGSquery_cache_ttl=300 を指定すると、クエリキャッシュの結果を 5 分間保存できます) 。

ClickHouse クエリキャッシュ の詳細については、こちらを参照してください。

Navigation