メインコンテンツへスキップ

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 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 テーブルがない場合、クエリログが有効になっていない可能性があります。有効化の詳細については、query_log setting を参照してください。
クラスターがない場合は、単一の 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 query_kind = 'Select'
    AND type = 'QueryFinish'
    and user != 'monitoring-internal'
GROUP BY
    normalized_query_hash,
    query,
    user
ORDER BY
    memory DESC;
最終更新日 2026年6月10日