system.trace_log
このシステムテーブルのデータは、ClickHouse Cloud の各ノードにローカルに格納されています。そのため、すべてのデータを包括的に確認するには、clusterAllReplicas 関数を使用する必要があります。詳細についてはこちらを参照してください。
説明
サンプリングクエリプロファイラ によって収集されたスタックトレースを格納します。
ClickHouse は、サーバー構成セクション trace_log が設定されている場合にこのテーブルを作成します。あわせて次の設定も参照してください: query_profiler_real_time_period_ns、query_profiler_cpu_time_period_ns、memory_profiler_step、 memory_profiler_sample_probability、trace_profile_events。
ログを分析するには、addressToLine、addressToLineWithInlines、addressToSymbol、demangle といったイントロスペクション関数を使用します。
カラム
hostname(LowCardinality(String)) — クエリを実行しているサーバーのホスト名。event_date(Date) — サンプリング時点の日付。event_time(DateTime) — サンプリング時点のタイムスタンプ。event_time_microseconds(DateTime64(6)) — マイクロ秒精度のサンプリング時点のタイムスタンプ。timestamp_ns(UInt64) — サンプリング時点のタイムスタンプ (ナノ秒単位) 。revision(UInt32) — ClickHouse サーバーのビルドリビジョン。clickhouse-clientでサーバーに接続すると、Connected to ClickHouse server version 19.18.1.のような文字列が表示されます。このフィールドにはサーバーのversionではなく、revisionが含まれます。trace_type(Enum8('Real' = 0, 'CPU' = 1, 'Memory' = 2, 'MemorySample' = 3, 'MemoryPeak' = 4, 'ProfileEvent' = 5, 'JemallocSample' = 6, 'MemoryAllocatedWithoutCheck' = 7, 'Instrumentation' = 8)) — トレースの種類:Realは、wall-clock time に基づいて stack traces を収集することを表します。CPUは、CPU 時間に基づいて stack traces を収集することを表します。Memoryは、メモリ割り当てが次のウォーターマークを超えたときに、割り当てと解放を収集することを表します。MemorySampleは、ランダムな割り当てと解放を収集することを表します。MemoryPeakは、Peak memory usage の更新を収集することを表します。ProfileEventは、profile events の増分を収集することを表します。JemallocSampleは、jemalloc のサンプルを収集することを表します。MemoryAllocatedWithoutCheckは、メモリ制限を無視して行われる大規模な割り当て (>16MiB) を収集することを表します (ClickHouse 開発者専用) 。Instrumentationは、XRay を通じて実行されるインストルメンテーションによって収集された traces を表します。cpu_id(UInt64) — CPU の識別子。thread_id(UInt64) — スレッド ID。thread_name(LowCardinality(String)) — スレッド名。query_id(String) —query_logsystem テーブルから、実行されていたクエリの詳細を取得するために使用できるクエリ識別子。trace(Array(UInt64)) — サンプリング時点のスタックトレース。各要素は ClickHouse サーバープロセス内の仮想メモリアドレスです。size(Int64) — トレースタイプが Memory、MemorySample、MemoryAllocatedWithoutCheck、または MemoryPeak の場合は割り当てられたメモリ量、それ以外のトレースタイプでは 0 です。ptr(UInt64) — 割り当てられたchunkのアドレスです。memory_context(Enum8('Unknown' = -1, 'Global' = 0, 'User' = 1, 'Process' = 2, 'Thread' = 3, 'Max' = 4)) — メモリトラッカーのコンテキスト (Memory/MemoryPeak のみ) :Unknownコンテキストは、この trace_type では定義されていません。Globalはサーバーコンテキストを表します。Userはユーザー/マージコンテキストを表します。Processはプロセス (つまりクエリ) コンテキストを表します。Threadはスレッド (特定のプロセスのスレッド) コンテキストを表します。Maxは特殊な値で、メモリトラッカーがブロックされていないことを意味します (blocked_context カラム用) 。memory_blocked_context(Enum8('Unknown' = -1, 'Global' = 0, 'User' = 1, 'Process' = 2, 'Thread' = 3, 'Max' = 4)) — メモリトラッカーがブロックされるコンテキスト (ClickHouse 開発者専用) :Unknownコンテキストは、この trace_type では定義されていません。Globalはサーバーコンテキストを表します。Userはユーザー/マージコンテキストを表します。Processはプロセス (つまりクエリ) コンテキストを表します。Threadはスレッドコンテキスト (特定のプロセスのスレッド) を表します。Maxは特殊な値で、メモリトラッカーがブロックされていないことを意味します (blocked_context カラム用) 。event(LowCardinality(String)) — トレースタイプが ProfileEvent の場合は、更新されたプロファイルイベントの名前を示します。それ以外のトレースタイプでは空文字列です。increment(Int64) — トレースの種類が ProfileEvent の場合は、プロファイルイベントの増分量です。それ以外のトレースの種類では 0 です。symbols(Array(LowCardinality(String))) — シンボル化が有効な場合は、traceに対応するデマングルされたシンボル名が含まれます。シンボル化は、サーバー設定ファイル内のtrace_logのsymbolize設定で有効または無効にできます。lines(Array(LowCardinality(String))) — シンボル化が有効な場合、traceに対応する行番号付きファイル名の文字列が格納されます。function_id(Nullable(Int32)) — trace 型の Instrumentation では、ELF バイナリの xray_instr_map セクション内で関数に割り当てられる ID。function_name(Nullable(String)) — trace 型の Instrumentation における、計装された関数の名前。handler(Nullable(String)) —trace型の Instrumentation の場合、計装対象の関数の handler。entry_type(Nullable(Enum8('Entry' = 0, 'Exit' = 1))) — trace 型の Instrumentation における、計測対象関数のエントリ種別。duration_nanoseconds(Nullable(UInt64)) — trace 型の Instrumentation における、関数の実行時間 (ナノ秒) 。
別名:
build_id—'E2EEB60ED9503BFFA825B628D480CCDC40B2D416'のエイリアス。
シンボル化はサーバーの構成ファイル内の trace_log セクションの symbolize で有効または無効を切り替えることができます。
例
Chrome Event Trace Format への変換
プロファイリングデータは、次のクエリを使用して Chrome の Event Trace Format に変換できます。クエリを chrome_trace.sql ファイルとして保存してください:
そして、ClickHouse Client でこれを実行して trace.json ファイルとしてエクスポートし、そのファイルを Perfetto または speedscope にインポートします。
よりコンパクトだが情報量の少ないトレースにしたい場合は、スタック部分を省略できます。
関連項目
- SYSTEM INSTRUMENT — 計測ポイントを追加または削除します。
- system.instrumentation — 計測済みポイントを確認します。
- system.symbols — 計測ポイントを追加するためのシンボルを確認します。