Aurora PostgreSQL クエリ計画管理
Aurora PostgreSQL DB クラスターのクエリプラン管理を有効にすると、オプティマイザは複数回処理する SQL ステートメントのクエリ実行計画を生成して保存します。オプティマイザは、マネージドステートメントの初期に生成された計画のステータスを常に Approved
に設定し、dba_plans
ビューに保存します。
管理ステートメントの一連の承認済み計画は、計画ベースラインと呼ばれます。アプリケーションが実行されると、オプティマイザが管理ステートメントに追加の計画を生成することがあります。オプティマイザは、追加でキャプチャされた計画を Unapproved
ステータスに設定します。
後で、Unapproved
計画が正常に機能するかどうかを確認し、Approved
、Rejected
、または Preferred
に変更できます。そのためには、apg_plan_mgmt.evolve_plan_baselines
関数または apg_plan_mgmt.set_plan_status
関数を使用します。
オプティマイザが SQL ステートメントの計画を生成すると、クエリプラン管理はその計画を apg_plan_mgmt.plans
テーブルに保存します。apg_plan_mgmt
ロールが付与されたデータベースユーザーは、apg_plan_mgmt.dba_plans
ビューをクエリすることで計画の詳細を確認できます。例えば、次のクエリでは、本番環境以外の Aurora PostgreSQL DB クラスターのビューに現在表示されている計画の詳細が一覧表示されます。
sql_hash
— SQL ステートメントの正規化されたテキストのハッシュ値である SQL ステートメントの識別子。plan_hash
—sql_hash
と計画のハッシュを組み合わせた一意の識別子。status
- 計画のステータス。オプティマイザは、承認済みの計画を実行できます。enabled
— 計画がすぐに使用できる (true) か、使用できない (false) かを示します。plan_outline
– 実際の実行計画を再作成するために使用された計画の表現。ツリー構造内の演算子は EXPLAIN 出力の演算子にマップされます。
apg_plan_mgmt.dba_plans
ビューには、計画が最後に使用された日時など、計画のすべての詳細を含むさらに多くの列があります。詳細については、「Aurora PostgreSQL 互換エディションの apg_plan_mgmt.dba_plans ビューのリファレンス」を参照してください。
正規化と SQL ハッシュ
apg_plan_mgmt.dba_plans
ビューでは、SQL のハッシュ値により管理ステートメントを識別できます。SQL ハッシュは、リテラル値などのいくつかの違いを取り除く SQL ステートメントの正規化表現で計算されます。
各 SQL ステートメントの正規化プロセスでは、スペースと大文字と小文字が区別されないため、SQL ステートメントの要点を読んで理解することができます。正規化により、次の項目が削除されるか置き換えられます。
先頭のブロックコメント
EXPLAIN キーワードと EXPLAIN オプション、EXPLAIN ANALYZE
末尾のスペース
すべてのリテラル
例として、以下のステートメントを見てみましょう。
/*Leading comment*/ EXPLAIN SELECT /* Query 1 */ * FROM t WHERE x > 7 AND y = 1;
クエリ計画管理は、このステートメントを次のように正規化します。
SELECT /* Query 1 */ * FROM t WHERE x > CONST AND y = CONST;
正規化を使用することで、リテラル値またはパラメータ値のみが異なる可能性がある類似の SQL ステートメントで同じ SQL ハッシュを使用できます。つまり、同じ SQL ハッシュに対して、異なる計画が異なる条件下で最適となる、複数の計画がある可能性があります。
注記
異なるスキーマで使用される単一の SQL ステートメントは、実行時に特定のスキーマにバインドされるため、計画が異なります。プランナーはスキーマバインディングの統計を使用して最適な計画を選択します。
オプティマイザが計画を選択する方法の詳細については、「Aurora PostgreSQL 管理計画を使用する」を参照してください。このセクションでは、EXPLAIN
および EXPLAIN ANALYZE
の使用方法と、実際に使用される前に計画をプレビューする方法を学ぶことができます。詳細については、「オプティマイザが選択した計画の分析」を参照してください。計画を選択するプロセスの概要を示す画像については、「オプティマイザが実行する計画を選択する方法。」を参照してください。