Aurora PostgreSQL クエリ計画管理 - Amazon Aurora

Aurora PostgreSQL クエリ計画管理

Aurora PostgreSQL DB クラスターのクエリプラン管理を有効にすると、オプティマイザは複数回処理する SQL ステートメントのクエリ実行計画を生成して保存します。オプティマイザは、マネージドステートメントの初期に生成された計画のステータスを常に Approved に設定し、dba_plans ビューに保存します。

管理ステートメントの一連の承認済み計画は、計画ベースラインと呼ばれます。アプリケーションが実行されると、オプティマイザが管理ステートメントに追加の計画を生成することがあります。オプティマイザは、追加でキャプチャされた計画を Unapproved ステータスに設定します。

後で、Unapproved 計画が正常に機能するかどうかを確認し、ApprovedRejected、または 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_hashsql_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 の使用方法と、実際に使用される前に計画をプレビューする方法を学ぶことができます。詳細については、「オプティマイザが選択した計画の分析」を参照してください。計画を選択するプロセスの概要を示す画像については、「オプティマイザが実行する計画を選択する方法。」を参照してください。