system.query_log テーブルの使用
次の便利なクエリを使うと、実行したクエリのうち、最も多くのメモリを使用したものを確認できます。
このクエリについて、いくつか補足があります。
- 結果は過去 1 日分 (
now() - toIntervalDay(1))) をもとに計算されますが、時間間隔は簡単に変更できます defaultという名前のクラスターがあることを前提としています。これは ClickHouse Cloud でのクラスター名です。defaultをご使用のクラスター名に変更してください- クラスターがない場合は、この記事の末尾に記載されているクエリを参照してください
SELECT
count() as nb_query,
user,
query,
sum(memory_usage) AS memory,
normalized_query_hash
FROM
clusterAllReplicas(default, system.query_log)
WHERE
(event_time >= (now() - toIntervalDay(1)))
AND is_initial_query = 1
AND query_kind = 'Select'
AND type = 'QueryFinish'
and user != 'monitoring-internal'
GROUP BY
normalized_query_hash,
query,
user
ORDER BY
memory DESC;レスポンスは次のようになります。
┌─nb_query─┬─user────┬─query─────────────────────────────────────────────────────────┬───memory─┬─normalized_query_hash─┐
│ 11 │ default │ select version() │ 46178924 │ 7202516440347714159 │
│ 2 │ default │ SELECT * FROM "system"."table_functions" LIMIT 31 OFFSET 0 │ 8391544 │ 12830067173062987695 │
└──────────┴─────────┴───────────────────────────────────────────────────────────────┴──────────┴───────────────────────┘クラスターがない場合は、単一の system.query_log テーブルを直接クエリできます:
SELECT
count() as nb_query,
user,
query,
sum(memory_usage) AS memory,
normalized_query_hash
FROM
system.query_log
WHERE
(event_time >= (now() - toIntervalDay(1)))
AND is_initial_query = 1
AND query_kind = 'Select'
AND type = 'QueryFinish'
and user != 'monitoring-internal'
GROUP BY
normalized_query_hash,
query,
user
ORDER BY
memory DESC;