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

内部調査関数

この章で説明する関数を使用して、クエリプロファイリングのために 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) — 実行中のプロセス内の命令のアドレス。

返される値

  • 最初の要素がファイル名と行番号でコロンで区切られた配列。その後、インライン関数のソースコードファイル名、行番号、および関数名がリストされます。デバッグ情報が見つからなかった場合は、単一要素の配列がバイナリ名で返され、無効なアドレスの場合は空の配列が返されます。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 を返します。

クエリ:

結果: