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

回答

system データベースの query_log テーブルには、次の項目を含むすべてのクエリが記録されます。
  • クエリが消費したメモリ量
  • 必要とした CPU 時間
次のクエリは、メモリ使用量が最も多いクエリの上位 10 件を返します。
応答は次のようになります。
initial_query_id は、リクエストを受信したノードから開始された分散クエリ実行における元のクエリの ID を表します。query_id には、別のノードで実行された子クエリの ID が含まれます。詳細は、こちらの記事を参照してください。
クエリ ID を使うと、そのクエリの詳細をさらに確認できます。では、上記の中で最も実行時間が長かったクエリ (最初のもの) を調べてみましょう。
これは、youtube という名前のテーブルに数十億行のデータを挿入する際に使用したクエリであることがわかります (YouTube の低評価データセットを参照) :

initial_query_id VS query_id

クラスター化された ClickHouse 環境 (ClickHouse Cloud など) では、initial_query_id は、リクエストを受け取ったノードから開始された分散クエリ実行における元のクエリの ID を表します。 一方、query_id フィールドには、別のノードで実行された子クエリの ID が入ります。
query_id の値が異なる原因は、分散実行だけではありません1 つのクエリが内部サブクエリを生成することもあり、それらはそれぞれ独自の query_idis_initial_query = 0 で記録されます。特によくあるのは、ClickHouse が ビュー を評価するために実行する内部クエリです。これらの内部識別子は ClickHouse によって割り当てられるため、クライアントに報告される ID と同じ形式にならない場合があります。ビュー関連の処理では、queryView... のようなラベルを含む query_id が表示されることがあります。送信したクエリそのものを正確に対象にしたい場合は、is_initial_query = 1 (または query_id = initial_query_id) で絞り込んでください。これは query_log のサーバー側の動作であり、Cloud SQL Console を含むどのクライアントからでも同じです。
上記のクエリに query_id を追加すると、initial_query_id = a7262fa2-bd8b-4b51-a359-621ccf282417hostname() を基準に検索対象を絞り込めます。
以下のようになります:
複数のホスト (異なるクラスター ノード) から複数の結果が返されている点に注意してください。 さらに絞り込んで子クエリだけを取得するには、WHERE句に query_id != initial_query_id という条件を追加することもできます。
クエリが最初に実行されたノードから見てリモートのノードで実行された、すべての子クエリを返します:
逆に、query_id = initial_query_id は、分散クエリが最初に発行されたローカルノードで実行されたクエリのみを返します。
以下のようになります。
他のシステムテーブルについても、各フィールドの意味についてはドキュメントで詳しく確認できます。
最終更新日 2026年7月1日