EDB Query Advisor

EDB Query Advisorは、 WHEREステートメント、 JOIN 句、およびワークロードクエリで見つかった述語に関する統計を保持することにより、インデックスの推奨事項を提供するPostgresの拡張機能です。仮想インデックスでクエリを再計画することにより、実際のワークロードクエリに対する費用対効果を分析します。仮想インデックスは、ワークロードクエリから収集された述語に基づいて作成されます。

この拡張機能は、考えられるすべてのインデックスを作成せずに、ワークロードクエリに利益をもたらす最も有用なインデックスを分析する場合に役立ちます。

述語コレクションは、クエリ内の既知のパターンを探すことによって機能します。これらのパターンには以下が含まれます。

  • バイナリOpExpr -少なくとも一方はテーブルの列です。可能な場合は常に、述語がスワップされ、CONST OP VAR 式がVAR COMMUTED_OP CONST に変わります。 AND式およびOR式のメンバーは、WHERE column1 = 2, WHERE column1 = column2, WHERE 3 = column3 など、個別のエントリとしてカウントされます。

  • ScalarArrayOpExpr - ScalarArrayOpExpr左辺がVAR、右辺が配列定数です。これらは、配列内の要素ごとに1回カウントされます。たとえば、 WHERE column1 IN (2, 3) は、 (column1, '=') 演算子のペアの2回のオカレンスとしてカウントされます。

  • BooleanTest -式は、WHERE column1 IS TRUE などの単純なブール列参照です。 WHERE columns1, WHERE NOT column1 のような句は現在処理されていません。

この拡張機能は、ワークロードテーブルで実行される個別のqueryidごとに、最初のクエリテキストをそのまま保存します。

Postgresサーバーを再起動しても、収集されたデータは保存されません。

インデックス推奨を生成するために使用するquery_advisor_index_recommendations ファンクションの説明については、 Using EDB Query Advisor を参照してください。

制限事項

  • 単一および2列のインデックスのみが考慮されます。

・ ユーティリティコマンドは統計を取得しません。

  • 述語とワークロードエントリの数は静的です。変更には再起動が必要です。