サンプリングクエリプロファイラー
ClickHouseは、クエリ実行を分析するためのサンプリングプロファイラーを実行します。プロファイラーを使用すると、クエリ実行中に最も頻繁に使用されたソースコードルーチンを特定できます。CPU時間やアイドル時間を含むウォールクロック時間を追跡できます。
クエリプロファイラーは、ClickHouse Cloudで自動的に有効になっており、以下のようにサンプルクエリを実行できます。
FROM system.trace_log
をFROM clusterAllReplicas(default, system.trace_log)
に変更して、クラスターのすべてのノードから選択してください。セルフマネージドデプロイメントでクエリプロファイラーを使用するには:
-
サーバー設定の trace_log セクションを設定します。
このセクションは、プロファイラーの機能の結果を含む trace_log システムテーブルを構成します。デフォルトで構成されています。このテーブルのデータは、実行中のサーバーに対してのみ有効であることを忘れないでください。サーバーを再起動すると、ClickHouseはテーブルをクリーンアップせず、すべての格納された仮想メモリアドレスが無効になる可能性があります。
-
query_profiler_cpu_time_period_ns または query_profiler_real_time_period_ns 設定を設定します。両方の設定を同時に使用できます。
これらの設定によりプロファイラータイマーを構成できます。これらはセッション設定であるため、サーバー全体、個々のユーザーやユーザープロファイル、インタラクティブセッション、各個別クエリに対して異なるサンプリング頻度を取得できます。
デフォルトのサンプリング頻度は1秒あたり1サンプルで、CPUタイマーとリアルタイマーの両方が有効になっています。この頻度は、ClickHouseクラスターに関する十分な情報を収集することを可能にします。同時に、この頻度で作業すると、プロファイラーはClickHouseサーバーのパフォーマンスに影響を与えません。各個別クエリをプロファイルする必要がある場合は、より高いサンプリング頻度を使用することをお勧めします。
trace_log
システムテーブルを分析するには:
-
clickhouse-common-static-dbg
パッケージをインストールします。 DEBパッケージからのインストールを参照してください。 -
allow_introspection_functions 設定でイントロスペクション機能を許可します。
セキュリティ上の理由から、イントロスペクション機能はデフォルトで無効になっています。
-
addressToLine
、addressToLineWithInlines
、addressToSymbol
、およびdemangle
イントロスペクション関数を使用して、ClickHouseコード内の関数名とその位置を取得します。特定のクエリのプロファイルを取得するには、trace_log
テーブルのデータを集計する必要があります。個々の関数または全体のスタックトレースでデータを集計できます。
trace_log
情報を視覚化したい場合は、flamegraph および speedscopeを試してください。
例
この例では、私たちは:
-
クエリ識別子と現在の日付で
trace_log
データをフィルタリングします。 -
スタックトレースで集計します。
-
イントロスペクション関数を使用して、以下のレポートを取得します:
- シンボル名とそれに対応するソースコード関数。
- これらの関数のソースコード位置。