ClickHouse/docs/ja/operations/optimizing_performance/sampling_query_profiler.md
2020-04-24 12:50:22 +03:00

4.0 KiB

machine_translated machine_translated_rev toc_priority toc_title
true d734a8e46d 54 Queryプロファイリング

クエリプ

ClickHouse運転サンプリングプロファイラでの分析クエリを実行します。 使用プロファイラでソースコードのルーチンを用いた最中に頻繁にクエリを実行します。 CPU時間とアイドル時間を含む壁時計の時間をトレースできます。

プロファイラを使用する:

  • この trace_log サーバー設定のセクション。

    このセクションでは、 trace_log プロファイラーの機能の結果を含むシステムテーブル。 デフォルトで設定されています。 このデータをこのテーブルのみ有効なオペレーティングシステムサーバーです。 後、サーバを再起動ClickHouseないクリーンのテーブルに格納された仮想メモリアドレスが無効になります。

  • この query_profiler_cpu_time_period_ns または query_profiler_real_time_period_ns 設定。 両方の設定を同時に使用できます。

    これらの設定を許可する設定プロファイラータイマー. これらはセッション設定であるため、サーバー全体、個々のユーザーまたはユーザープロファイル、対話型セッション、および個々のクエリごとに異なるサンプリング

デフォルトのサンプリング周波数はサンプルや、cpu、リアルタイマーが有効になっています。 この周波数により収集に関する情報を十分にclickhouse。 同時に、この頻度で作業しても、プロファイラーはclickhouseサーバーのパフォーマンスに影響しません。 が必要な場合にプロファイル毎に個別のクエリを利用するようにして高サンプリング周波数です。

分析するため trace_log システム表:

  • インストール clickhouse-common-static-dbg パッケージ。 見る DEBパッケージからのイ.

  • によってイントロスペクション機能を許可する allow_introspection_functions 設定。

    セキュ

  • を使用 addressToLine, addressToSymboldemangle イントロスペクション関数 ClickHouseコードで関数名とその位置を取得する。 いくつかのクエリのプロファイルを取得するには、 trace_log テーブル。 個々の関数またはスタックトレース全体でデータを集計できます。

あなたが視覚化する必要がある場合 trace_log 情報、試してみる flamegraphspeedscope.

例えば

この例では、:

  • フィルタ trace_log クエリ識別子と現在の日付によるデータ。

  • スタックトレースによる集計。

  • イントロスペクション関数を使用して、我々のレポートを取得します:

    • シンボルおよび対応するソースコード関数の名前。
    • これらの関数のソースコードの場所。
SELECT
    count(),
    arrayStringConcat(arrayMap(x -> concat(demangle(addressToSymbol(x)), '\n    ', addressToLine(x)), trace), '\n') AS sym
FROM system.trace_log
WHERE (query_id = 'ebca3574-ad0a-400a-9cbc-dca382f5998c') AND (event_date = today())
GROUP BY trace
ORDER BY count() DESC
LIMIT 10
{% include "examples/sampling_query_profiler_result.txt" %}