system.trace_log
このシステムテーブルのデータは、ClickHouse Cloud の各ノードにローカルに格納されています。そのため、すべてのデータを包括的に確認するには、clusterAllReplicas 関数を使用する必要があります。詳細についてはこちらを参照してください。
sampling query profiler によって収集されたスタックトレースを格納します。
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) — マイクロ秒精度のサンプリング時点のタイムスタンプ。 -
timestamp_ns(UInt64) — ナノ秒単位のサンプリング時点のタイムスタンプ。 -
revision(UInt32) — ClickHouse サーバーのビルドリビジョン。clickhouse-clientでサーバーに接続すると、Connected to ClickHouse server version 19.18.1.のような文字列が表示されます。このフィールドにはサーバーのversionではなくrevisionが格納されます。 -
trace_type(Enum8) — トレースの種類:Realはウォールクロック時間に基づくスタックトレース収集を表します。CPUは CPU 時間に基づくスタックトレース収集を表します。Memoryはメモリアロケーションが設定されたウォーターマーク(しきい値)を超えた場合のアロケーションおよびデアロケーションの収集を表します。MemorySampleはランダムなアロケーションおよびデアロケーションの収集を表します。MemoryPeakはピークメモリ使用量の更新の収集を表します。ProfileEventはプロファイルイベントのインクリメントの収集を表します。JemallocSampleは jemalloc サンプルの収集を表します。MemoryAllocatedWithoutCheckは、あらゆるメモリ制限を無視して実行される大きなアロケーション(>16MiB)の収集を表します(ClickHouse 開発者のみ)。Instrumentationは XRay によるインストルメンテーションによって収集されたトレースを表します。
-
cpu_id(UInt64) — CPU 識別子。 -
thread_id(UInt64) — スレッド識別子。 -
query_id(String) — 実行中だったクエリの詳細を query_log システムテーブルから取得するために使用できるクエリ識別子。 -
trace(Array(UInt64)) — サンプリング時点でのスタックトレース。各要素は ClickHouse サーバープロセス内の仮想メモリアドレスです。 -
size(Int64) - トレースタイプがMemory、MemorySampleまたはMemoryPeakの場合は割り当てられたメモリ量を表し、それ以外のトレースタイプの場合は 0 です。 -
event(LowCardinality(String)) - トレースタイプがProfileEventの場合は更新されたプロファイルイベント名を表し、それ以外のトレースタイプの場合は空文字列です。 -
increment(UInt64) - トレースタイプがProfileEventの場合はプロファイルイベントのインクリメント量を表し、それ以外のトレースタイプの場合は 0 です。 -
symbols, (Array(LowCardinality(String))), シンボル化が有効な場合、traceに対応するデマングル済みシンボル名を格納します。 -
lines, (Array(LowCardinality(String))), シンボル化が有効な場合、traceに対応するファイル名と行番号を含む文字列を格納します。 -
function_id(Nullable(Int32)), トレースタイプが Instrumentation の場合、elf-binary の xray_instr_map セクションで関数に割り当てられた ID。 -
function_name(Nullable(String)), トレースタイプが Instrumentation の場合、インストルメンテーション対象関数の名前。 -
handler(Nullable(String)), トレースタイプが Instrumentation の場合、インストルメンテーション対象関数のハンドラー。 -
entry_type(Nullable(Enum('Entry' = 0, 'Exit' = 1))), トレースタイプが Instrumentation の場合、トレースのエントリー種別。 -
duration_nanoseconds(Nullable(UInt64)), トレースタイプが Instrumentation の場合、関数がナノ秒単位で実行されていた時間。
シンボル化はサーバーの構成ファイル内の trace_log セクションの symbolize で有効または無効を切り替えることができます。
例
プロファイリングデータは、次のクエリで Chrome の Event Trace Format に変換できます。クエリを chrome_trace.sql というファイルに保存します。
そして、それを ClickHouse Client で実行し、trace.json ファイルとしてエクスポートします。このファイルは Perfetto または speedscope のいずれかでインポートできます。
よりコンパクトだが情報量の少ないトレースにしたい場合は、スタック情報の部分を省略できます。
関連項目
- SYSTEM INSTRUMENT — 計測ポイントを追加または削除します。
- system.instrumentation - 計測済みの関数を確認します。