ClickHouse/docs/ja/operations/optimizing-performance/sampling-query-profiler.md
2020-10-13 20:23:29 +03:00

4.1 KiB

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

サンプリングクロファイラ

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

Profilerを使用するには:

  • セットアップ trace_log サーバー構成のセクション。

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

  • セットアップ query_profiler_cpu_time_period_ns または query_profiler_real_time_period_ns 設定。 両方の設定を同時に使用できます。

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

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

分析するには trace_log システム表:

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

  • によるイントロスペクション関数を許可する。 allow_introspection_functions 設定。

    セキュリティ上の理由から、introspection関数は既定で無効になっています。

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

視覚化する必要がある場合 trace_log 情報、試して フラメグラフスピードスコープ.

この例では、:

  • フィルタ処理 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" %}