メインコンテンツまでスキップ
メインコンテンツまでスキップ

Introspection Functions

この章で説明する関数を使用して、クエリプロファイリングのためにELFおよびDWARFを内部検査できます。

注記

これらの関数は遅く、セキュリティ上の考慮事項をもたらす可能性があります。

内部検査関数が正しく機能するためには:

  • clickhouse-common-static-dbgパッケージをインストールしてください。

  • allow_introspection_functions設定を1に設定してください。

    セキュリティ上の理由から、内部検査関数はデフォルトで無効になっています。

ClickHouseはプロファイラーレポートをtrace_logシステムテーブルに保存します。テーブルとプロファイラーが正しく設定されていることを確認してください。

addressToLine

ClickHouseサーバープロセス内の仮想メモリアドレスを、ClickHouseソースコード内のファイル名と行番号に変換します。

公式のClickHouseパッケージを使用する場合は、clickhouse-common-static-dbgパッケージをインストールする必要があります。

構文

引数

  • address_of_binary_instruction (UInt64) — 実行中のプロセスにおける命令のアドレス。

戻り値

  • コロンで区切られたソースコードのファイル名と行番号。 例えば、/build/obj-x86_64-linux-gnu/../src/Common/ThreadPool.cpp:199、ここで 199 は行番号です。
  • デバッグ情報が見つからなかった場合のバイナリの名前。
  • アドレスが無効である場合は空文字列。

タイプ: String

内部検査関数を有効にする:

trace_logシステムテーブルから最初の文字列を選択する:

traceフィールドには、サンプリング時のスタックトレースが含まれています。

単一アドレスのソースコードファイル名と行番号を取得する:

スタックトレース全体に関数を適用する:

arrayMap関数は、trace配列の各個別の要素をaddressToLine関数で処理することを可能にします。この処理の結果は出力のtrace_source_code_linesカラムに表示されます。

addressToLineWithInlines

addressToLineに似ていますが、すべてのインライン関数を含む配列を返します。この結果、addressToLineよりも遅くなります。

注記

公式のClickHouseパッケージを使用する場合は、clickhouse-common-static-dbgパッケージをインストールする必要があります。

構文

引数

  • address_of_binary_instruction (UInt64) — 実行中のプロセスにおける命令のアドレス。

戻り値

  • 最初の要素はコロンで区切られたソースコードファイル名と行番号で構成される配列。2番目の要素以降は、インライン関数のソースコードファイル名、行番号、および関数名がリストされます。デバッグ情報が見つからなかった場合はバイナリの名前と同じ要素を持つ単一要素の配列が返され、それ以外にアドレスが無効な場合は空の配列が返されます。Array(String)

内部検査関数を有効にする:

アドレスに対して関数を適用する。

スタックトレース全体に関数を適用する:

arrayJoin関数は配列を行に分割します。

addressToSymbol

ClickHouseオブジェクトファイル内のシンボルに、ClickHouseサーバープロセス内の仮想メモリアドレスを変換します。

構文

引数

  • address_of_binary_instruction (UInt64) — 実行中のプロセスにおける命令のアドレス。

戻り値

  • ClickHouseオブジェクトファイルのシンボル。String
  • アドレスが無効の場合は空文字列。String

内部検査関数を有効にする:

trace_logシステムテーブルから最初の文字列を選択する:

traceフィールドには、サンプリング時のスタックトレースが含まれています。

単一アドレスのシンボルを取得する:

スタックトレース全体に関数を適用する:

arrayMap関数は、trace配列の各個別の要素をaddressToSymbols関数で処理します。この処理の結果は出力のtrace_symbolsカラムに表示されます。

demangle

addressToSymbol関数を使用して取得したシンボルを、C++関数名に変換します。

構文

引数

  • symbol (String) — オブジェクトファイルからのシンボル。

戻り値

  • C++関数の名前、またはシンボルが無効な場合は空文字列。String

内部検査関数を有効にする:

trace_logシステムテーブルから最初の文字列を選択する:

traceフィールドには、サンプリング時のスタックトレースが含まれています。

単一アドレスの関数名を取得する:

スタックトレース全体に関数を適用する:

arrayMap関数は、trace配列の各個別の要素をdemangle関数で処理します。この処理の結果は出力のtrace_functionsカラムに表示されます。

tid

現在のBlockが処理されているスレッドのIDを返します。

構文

戻り値

  • 現在のスレッドID。Uint64

クエリ:

結果:

logTrace

Blockに対して、サーバーログにトレースログメッセージを出力します。

構文

引数

  • message — サーバーログに出力されるメッセージ。String

戻り値

  • 常に0を返します。

クエリ:

結果: