STL_QUERY_METRICS - Amazon Redshift

STL_QUERY_METRICS

ユーザー定義のクエリキュー (サービスクラス) でアクティブに実行され、完了したクエリについて、処理される列数、CPU 使用率、入出力、ディスク使用率などのメトリクス情報を含みます。現在実行されているアクティブなクエリのメトリクスを表示するには、STV_QUERY_METRICS システムビューを参照してください。

クエリメトリクスは、1 秒間隔でサンプリングされます。結果として、同じクエリが複数実行され、わずかに異なる時刻を返す場合があります。また、1 秒未満で実行されるクエリセグメントは記録されない場合があります。

STL_QUERY_METRICS は、クエリレベル、セグメントレベル、およびステップレベルでメトリクスを追跡および集計します。クエリセグメントとステップの詳細については、「クエリプランと実行ワークフロー」を参照してください。多くのメトリクス (max_rowscpu_timeなど) は、ノードスライスを超えて合計されます。ノードスライスの詳細については、「データウェアハウスシステムのアーキテクチャ」を参照してください。

列がメトリクスをレポートするレベルを確認するには、segment列および step_type 列を調べます。

  • segmentstep_type の両方が -1 である場合、列はクエリレベルでメトリクスをレポートします。

  • segment-1 でなく、step_type-1 である場合、列はメトリクスをセグメントレベルでレポートします。

  • segmentstep_type の両方が -1 でない場合、列はステップレベルでメトリクスをレポートします。

SVL_QUERY_METRICS ビューと SVL_QUERY_METRICS_SUMMARY ビューは、このビューのデータを集計し、より便利な形式で情報を表示します。

STL_QUERY_METRICS はすべてのユーザーに表示されます。スーパーユーザーはすべての行を表示できますが、通常のユーザーは自分のデータのみを表示できます。詳細については、「システムテーブルとビューのデータの可視性」を参照してください。

このテーブルの一部またはすべてのデータは、SYS モニタリングビュー SYS_QUERY_DETAIL でも確認できます。SYS モニタリングビューのデータは、使いやすく理解しやすいようにフォーマットされます。クエリには、SYS モニタリングビューを使用することをお勧めします。

テーブルの列

列名 データ型 説明
userid integer エントリを生成したクエリを実行したユーザーの ID。
service_class integer サービスクラスの ID。クエリキューは WLM 設定で定義されます。メトリクスはユーザー定義のキューについてのみレポートされます。
query integer クエリ ID。クエリ列は、他の各種システムテーブルおよびビューを結合するために使用できます。
segment integer セグメント番号。複数のセグメントから構成された 1 つのクエリ。各セグメントは 1 つ以上のステップから構成されます。複数のクエリセグメントを同時に実行できます。各セグメントは 1 つのプロセスで実行されます。セグメント値が -1 である場合は、メトリクスセグメントの値はクエリレベルまでロールアップされます。
step_type integer 実行されたステップのタイプ。ステップタイプの説明については、「ステップタイプ」を参照してください。
starttime timestamp UTC で表されたクエリの実行開始時刻。秒の小数部の精度 (6 桁) を使用します。例: 2009-06-12 11:29:19.131358
スライス integer クラスターのスライスの数。
max_rows bigint ステップの列出力の最大数 (すべてのスライスにわたる集計値)。
rows bigint ステップに処理された行数。
max_cpu_time bigint CPU の最長使用時間 (ミリ秒)。セグメントレベルでは、すべてのスライスにわたるセグメントによる CPU の最長使用時間。クエリレベルでは、任意のクエリセグメントによる CPU の最長使用時間。
cpu_time bigint CPU の使用時間 (ミリ秒)。セグメントレベルでは、すべてのスライスにわたるセグメントの CPU 時間の合計。クエリレベルでは、すべてのスライスとセグメントにわたるクエリの CPU 時間の合計。
max_blocks_read bigint セグメントに読み取られた 1 MB ブロックの最大数 (すべてのスライスにわたる集計値)。セグメントレベルでは、すべてのスライスにわたるセグメントによって読み取られた 1 MB ブロックの最大数。クエリレベルでは、任意のクエリセグメントによって読み取られた 1 MB ブロックの最大数。
blocks_read bigint クエリまたはセグメントに読み取られた 1 MB ブロックの数。
max_run_time bigint セグメントの最長経過時間 (ミリ秒) セグメントレベルでは、すべてのスライスにわたるセグメントの最長実行時間。クエリレベルでは、任意のクエリセグメントの最長実行時間。
run_time bigint

すべてのスライスにわたって集計された合計実行時間。実行時間に待機時間は含まれません。

セグメントレベルでは、すべてのスライスにわたって合計されたセグメントの実行時間。クエリレベルでは、全てのスライスとセグメントにわたって合計されたクエリの実行時間。合計値であるため、実行時間はクエリの実行時間とは関連しません。

max_blocks_to_disk bigint 中間結果の書き込みに使用する最大ディスク容量 (MB ブロック)。セグメントレベルでは、全てのスライスにわたるセグメントによって使用された最大ディスク容量。クエリレベルでは、任意のクエリセグメントによって使用された最大ディスク容量。
blocks_to_disk bigint クエリまたはセグメントが中間結果の書き込みに使用するディスク容量 (MB ブロック)。
step integer 実行されたクエリステップ。
max_query_scan_size bigint クエリによってスキャンされた最大データサイズ (MB)。セグメントレベルでは、すべてのスライスにわたるセグメントによってスキャンされたデータの最大サイズ。クエリレベルでは、任意のクエリセグメントによってスキャンされたデータの最大サイズ。
query_scan_size bigint クエリによってスキャンされたデータサイズ (MB)。
query_priority integer クエリの優先度です。有効な値は、-10123、および 4 です。ここで、-1 は、クエリ優先度がサポートされていないことを意味します。
query_queue_time bigint クエリがキューに入れられた時間 (マイクロ秒)。
service_class_name character(64) サービスクラスの名前。

サンプルクエリ

CPU 時間の長いクエリ (1,000 秒以上) を検索するには、次のクエリを実行します。

Select query, cpu_time / 1000000 as cpu_seconds from stl_query_metrics where segment = -1 and cpu_time > 1000000000 order by cpu_time; query | cpu_seconds ------+------------ 25775 | 9540

ネストされたループ結合を持ち、100 万以上の行を返したクエリを検索するには、次のクエリを実行します。

select query, rows from stl_query_metrics where step_type = 15 and rows > 1000000 order by rows; query | rows ------+----------- 25775 | 2621562702

60 秒以上実行されていて CPU 時間が 10 秒以下のアクティブなクエリを検索するには、次のクエリを実行します。

select query, run_time/1000000 as run_time_seconds from stl_query_metrics where segment = -1 and run_time > 60000000 and cpu_time < 10000000; query | run_time_seconds ------+----------------- 25775 | 114