

# レプリカでの Aurora PostgreSQL 実行プランのキャプチャ
<a name="AuroraPostgreSQL.QPM.Plancapturereplicas"></a>

QPM (クエリプラン管理) を使用すると、Aurora Replicas によって生成されたクエリプランをキャプチャし、Aurora DB クラスターのプライマリ DB インスタンスに保存できます。すべての Aurora Replicas からクエリプランを収集し、プライマリインスタンスの中央永続テーブルで最適なプランのセットを管理できます。その後、必要に応じてこれらのプランを他のレプリカに適用できます。これにより、DB クラスターやエンジンバージョン全体にわたって実行プランの安定性を維持し、クエリのパフォーマンスを向上させることができます。

**Topics**
+ [前提条件](#AuroraPostgreSQL.QPM.Plancapturereplicas.Prereq)
+ [Aurora Replicas のプランキャプチャの管理](#AuroraPostgreSQL.QPM.Plancapturereplicas.managing)
+ [トラブルシューティング](#AuroraPostgreSQL.QPM.Plancapturereplicas.Troubleshooting)

## 前提条件
<a name="AuroraPostgreSQL.QPM.Plancapturereplicas.Prereq"></a>

**Aurora レプリカで `capture_plan_baselines parameter` を有効にする** - Aurora Replicas でプランをキャプチャするには、`capture_plan_baselines` パラメーターを自動または手動に設定します。詳細については、「[apg\$1plan\$1mgmt.capture\$1plan\$1baselines](AuroraPostgreSQL.Optimize.Parameters.md#AuroraPostgreSQL.Optimize.Parameters.capture_plan_baselines)」を参照してください。

**postgres\$1fdw 拡張機能をインストールする** - Aurora Replicas でプランをキャプチャするには、`postgres_fdw` 外部データラッパー拡張機能をインストールする必要があります。拡張機能をインストールするには、各データベースで次のコマンドを実行します。

```
postgres=> CREATE EXTENSION IF NOT EXISTS postgres_fdw;
```

## Aurora Replicas のプランキャプチャの管理
<a name="AuroraPostgreSQL.QPM.Plancapturereplicas.managing"></a>

**Aurora Replicas のプランキャプチャをオンにする**  
Aurora Replicas でプランキャプチャを作成または削除するには、`rds_superuser` 権限が必要です。ユーザーのロールとアクセス許可の詳細については、「[PostgreSQL のロールとアクセス許可の理解](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.PostgreSQL.CommonDBATasks.Roles.html)」を参照してください。

プランをキャプチャするには、以下に示すように、ライター DB インスタンスで関数 apg\$1plan\$1mgmt.create\$1replica\$1plan\$1capture を呼び出します。

```
postgres=> CALL apg_plan_mgmt.create_replica_plan_capture('endpoint', 'password');
```
+ エンドポイント - Aurora Global Database ライターエンドポイントまたは cluster\$1endpoint は、Aurora Replicas でのプランキャプチャに対してフェイルオーバーのサポートを提供します。

  Aurora Global Database ライターエンドポイントの詳細については、「[Amazon Aurora Global Database のエンドポイントの表示](aurora-global-database-connecting.md#viewing-endpoints)」を参照してください。

  クラスターエンドポイントの詳細については、「[Amazon Aurora のクラスターエンドポイント](Aurora.Endpoints.Cluster.md)」を参照してください。
+ パスワード - セキュリティを強化するためにパスワードを作成する際は、以下のガイドラインに従うことをお勧めします。
  + 少なくとも 8 文字を含める必要があります。
  + 少なくとも大文字 1 つ、小文字 1 つ、および 数字 1 つを含める必要があります。
  + 少なくとも 1 つの特殊文字 (`?`、`!`、`#`、`<`、`>`、`*`、など) を含める必要です。

**注記**  
エンドポイント、パスワード、またはポート番号を変更した場合は、エンドポイントとパスワードを使用して `apg_plan_mgmt.create_replica_plan_capture()` を再実行し、プランキャプチャを再初期化する必要があります。そうでない場合、Aurora Replicas からのプランのキャプチャは失敗します。

**Aurora Replicas のプランキャプチャをオフにする**  
Aurora Replicas の `capture_plan_baselines` パラメータをオフにするには、パラメータグループの値を `off` に設定します。

**Aurora Replicas のプランキャプチャを削除する**  
Aurora Replicas のプランキャプチャは完全に削除できますが、削除する前に確認してください。プランキャプチャを削除するには、以下のように `apg_plan_mgmt.remove_replica_plan_capture` を呼び出します。

```
postgres=> CALL apg_plan_mgmt.remove_replica_plan_capture();
```

エンドポイントとパスワードを使用して Aurora Replicas のプランキャプチャをオンにするには、apg\$1plan\$1mgmt.create\$1replica\$1plan\$1capture() を再度呼び出す必要があります。

## トラブルシューティング
<a name="AuroraPostgreSQL.QPM.Plancapturereplicas.Troubleshooting"></a>

以下に、プランが想定どおりに Aurora Replicas にキャプチャされない場合のトラブルシューティングのヒントと回避策を示します。
+ **パラメータ設定** - プランキャプチャを有効にするために `capture_plan_baselines` パラメータが適切な値に設定されているかどうかを確認してください。
+ **`postgres_fdw` 拡張機能がインストールされている** - 次のクエリを使用して `postgres_fdw` がインストールされているかどうかを確認してください。

  ```
  postgres=> SELECT * FROM pg_extension WHERE extname = 'postgres_fdw'
  ```
+ **create\$1replica\$1plan\$1capture() が呼び出されている** - 以下のコマンドを使用して、ユーザーマッピングが終了しているかどうかを確認します。それ以外の場合は、`create_replica_plan_capture()` を呼び出して機能を初期化します。

  ```
  postgres=> SELECT * FROM pg_foreign_server WHERE srvname = 'apg_plan_mgmt_writer_foreign_server';
  ```
+ **エンドポイントとポート番号** - エンドポイントとポート番号が適切かどうかを確認してください。これらの値が間違っていても、エラーメッセージは表示されません。

  次のコマンドを使用して、エンドポイントが create() で使用されているかどうかを確認し、そのエンドポイントがどのデータベースにあるかを確認します。

  ```
  postgres=> SELECT srvoptions FROM pg_foreign_server WHERE srvname = 'apg_plan_mgmt_writer_foreign_server';
  ```
+ **reload()** - 削除機能を有効にするには、Aurora Replicas で apg\$1plan\$1mgmt.delete\$1plan() を呼び出した後に apg\$1plan\$1mgmt.reload() を呼び出す必要があります。これにより、変更が正常に実装されたことが保証されます。
+ **パスワード** - 記載されているガイドラインに従って create\$1replica\$1plan\$1capture() にパスワードを入力する必要があります。入力しないと、エラーメッセージが表示されます。詳細については、「[Aurora Replicas のプランキャプチャの管理](#AuroraPostgreSQL.QPM.Plancapturereplicas.managing)」を参照してください。要件に合った別のパスワードを使用してください。
+ **クロスリージョン接続** - Aurora Replicas でのプランキャプチャは Aurora グローバルデータベースでもサポートされており、ライターインスタンスと Aurora Replicas は異なるリージョンに配置できます。Aurora Global Database ライターエンドポイントを使用して、フェイルオーバーイベントまたはスイッチオーバーイベント後に接続を維持してください。Aurora Global Database エンドポイントの詳細については、「[Amazon Aurora Global Database のエンドポイントの表示](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database-connecting.html#viewing-endpoints)」を参照してください。ライターインスタンスとクロスリージョンレプリカは VPC ピアリングを使用して通信できる必要があります。詳細については、「[VPC ピアリング接続](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html)」を参照してください。クロスリージョンフェイルオーバーが発生した場合、エンドポイントを新しいプライマリ DB クラスターエンドポイントに再設定する必要があります。
**注記**  
Aurora Global Database ライターエンドポイントの代わりにクラスターエンドポイントを使用する場合は、グローバルフェイルオーバーまたはスイッチオーバーオペレーションを実行した後にクラスターエンドポイントを更新する必要があります。