apg_plan_mgmt.dba_plans ビューでの計画の検証 - Amazon Aurora

apg_plan_mgmt.dba_plans ビューでの計画の検証

クエリ計画管理では、apg_plan_mgmt.dba_plans と呼ばれるデータベース管理者 (DBA) が使用する SQL ビューを提供します。このビューには、DB インスタンスのデータベースの計画履歴がすべて含まれています。

このビューには、すべての管理ステートメントの計画履歴が含まれています。管理計画はそれぞれ、SQL ハッシュ値と計画ハッシュ値の組み合わせによって識別されます。これらの識別子を使用すると、Amazon RDS Performance Insights などのツールを使用して個別の計画のパフォーマンスを追跡できます。Performance Insights の詳細については、「Amazon RDS Performance Insights の使用」を参照してください。

注記

apg_plan_mgmt.dba_plans ビューへのアクセスは、apg_plan_mgmt ロールを持つユーザーに制限されています。

管理計画のリスト化

管理計画をリスト化するには、apg_plan_mgmt.dba_plans ビューの SELECT ステートメントを使用します。次の例では、dba_plans ビューに、承認済みの計画および未承認の計画を識別する status などの列が表示されます。

SELECT sql_hash, plan_hash, status, enabled, stmt_name FROM apg_plan_mgmt.dba_plans; sql_hash | plan_hash | status | enabled | stmt_name ------------+-----------+------------+---------+------------ 1984047223 | 512153379 | Approved | t | rangequery 1984047223 | 512284451 | Unapproved | t | rangequery (2 rows)

apg_plan_mgmt.dba_plans ビューのリファレンス

apg_plan_mgmt.dba_plans ビューの計画情報の列には以下のものが含まれます。

dba_plans 列 説明
cardinality_error

推定濃度と実際の濃度の間の誤差の程度。濃度とは、計画により処理されるテーブルの行数です。濃度誤差が大きい場合、計画が最適ではない可能性が高くなります。この列は apg_plan_mgmt.evolve_plan_baselines 関数によって入力されます。

compatibility_level

Aurora PostgreSQL オプティマイザの機能レベル。

created_by 計画を作成した認証済みユーザー (session_user)。
enabled

計画が有効か無効かを示すインジケータ。すべての計画はデフォルトで有効になっています。計画を無効にして、オプティマイザが計画を使用しないようにすることができます。この値を変更するには、apg_plan_mgmt.set_plan_enabled 関数を使用します。

environment_variables

計画の取得時点でオプティマイザにより上書きされた、PostgreSQL Grand Unified Configuration (GUC) のパラメータおよび値。

estimated_startup_cost オプティマイザがテーブルの行を配信する前の、推定オプティマイザ設定コスト。
estimated_total_cost 最終テーブル行を配信するための推定オプティマイザコスト。
execution_time_benefit_ms 計画を有効にすることで速くなる実行時間。この列は apg_plan_mgmt.evolve_plan_baselines 関数によって入力されます。
execution_time_ms 計画が実行される推定時間 (ミリ秒)。この列は apg_plan_mgmt.evolve_plan_baselines 関数によって入力されます。
has_side_effects SQL ステートメントがデータ操作言語 (DML) ステートメント、または VOLATILE 関数を含む SELECT ステートメントであることを示す値。
last_used この値は、計画の実行時、または計画がクエリオプティマイザの最小コスト計画であるときに、現在の日付に更新されます。この値は共有メモリに保存され、定期的にディスクにフラッシュされます。最新の値を取得するには、apg_plan_mgmt.plan_last_used(sql_hash, plan_hash) の値を読み取る代わりに関数 last_used を呼び出して、共有メモリから日付を読み取ります。詳細については、apg_plan_mgmt.plan_retention_period パラメータを参照してください。
last_validated 計画が apg_plan_mgmt.validate_plans 関数または apg_plan_mgmt.evolve_plan_baselines 関数のいずれかにより再作成可能であることが検証された最新の日時。
last_verified 計画が、apg_plan_mgmt.evolve_plan_baselines 関数で指定されたパラメータに対して最もパフォーマンスの高い計画であることが検証された最新の日時。
origin

apg_plan_mgmt.capture_plan_baselines パラメータを使用して計画が取得された方法。有効な値には次のようなものがあります。

M - 計画は、手動計画取り込みで取得されています。

A - 計画は、自動計画取り込みで取得されています。

param_list

ステートメントに渡されたパラメータ値 (これが準備済みステートメントである場合)。

plan_created 計画が作成された日時。
plan_hash 計画の識別子。plan_hashsql_hash の組み合わせにより、特定の計画を一意に識別できます。
plan_outline 実際の実行計画を再作成するために使用された、データベースに依存しない計画の表現。ツリーの演算子は、EXPLAIN 出力に表示される演算子に対応しています。
planning_time_ms

プランナーを実際に実行する時間 (ミリ秒)。この列は apg_plan_mgmt.evolve_plan_baselines 関数によって入力されます。

queryId pg_stat_statements エクステンションによって計算されたステートメントのハッシュ。これはオブジェクト識別子 (OID) に依存しています。安定識別子や非データベース依存の識別子ではありません。
sql_hash リテラルを削除して正規化した、SQL ステートメントのテキストのハッシュ値。
sql_text SQL ステートメントのフルテキスト。
status

オプティマイザによる計画の使用方法を決定する、計画のステータス。有効な値には次のようなものがあります。

  • Approved - オプティマイザで選択して実行できる使用可能な計画。オプティマイザは、管理ステートメントの一連の承認済み計画 (ベースライン) から最小コスト計画を実行します。計画を承認済みにリセットするには、apg_plan_mgmt.evolve_plan_baselines 関数を使用します。

  • Unapproved - 使用可能性が検証されていない取得済み計画。詳細については、「計画パフォーマンスの評価」を参照してください。

  • Rejected - オプティマイザが使用しない計画。詳細については、「低速な計画の拒否または無効化」を参照してください。

  • Preferred - 管理ステートメントでの使用に推奨されると判断した計画。

    オプティマイザの最小コスト計画が承認済みまたは推奨される計画ではない場合は、計画実施のオーバーヘッドを削減できます。そのためには、承認済み計画のサブセットを Preferred にします。オプティマイザの最小コストが Approved 計画ではない場合、Preferred 計画の前に Approved 計画が選択されます。

    計画を Preferred にリセットするには、apg_plan_mgmt.set_plan_status 関数を使用します。

stmt_name PREPARE ステートメント内の SQL ステートメントの名前。名前のない準備済みステートメントの場合、この値は空の文字列になります。名前のないステートメントの場合、この値は NULL になります。
total_time_benefit_ms

この計画を有効にすることで速くなる実行時間の合計。この値には、計画時間と実行時間の両方が考慮されます。

この値が負の場合、この計画を有効にすることは推奨されません。この列は apg_plan_mgmt.evolve_plan_baselines 関数によって入力されます。