

# Aurora PostgreSQL クエリ計画の削除
<a name="AuroraPostgreSQL.Optimize.Deleting"></a>

使用していない実行計画、または有効でない計画を削除します。計画の削除の詳細については、以下のセクションを参照してください。

**Topics**
+ [計画の削除](#AuroraPostgreSQL.Optimize.Maintenance.DeletingPlans)
+ [計画の検証](#AuroraPostgreSQL.Optimize.Maintenance.ValidatingPlans)

## 計画の削除
<a name="AuroraPostgreSQL.Optimize.Maintenance.DeletingPlans"></a>

計画は、1 か月以上、具体的には 32 日間使用されなかった場合、自動的に削除されます。これは、`apg_plan_mgmt.plan_retention_period` パラメータのデフォルト設定です。計画の保持期間をより長い期間に変更できますが、最小期間は 1 です。計画が最後に使用された日付から、`last_used` の日付を現在の日付から引いて日数を算出します。`last_used` の日付は、オプティマイザが最小コスト計画としてプランを選択したか、プランが実行された最新の日付です。計画の日付は `apg_plan_mgmt.dba_plans` ビューに保存されます。

長期間使用されていない、または有用ではない計画を削除することをお勧めします。すべての計画には `last_used` の日付があり、オプティマイザは計画を実行するたびに更新するか、ステートメントの最小コスト計画として計画を選択します。最後の `last_used` の日付を確認して、安全に削除できる計画を確認してください。

次のクエリは、プランの総数、削除に失敗したプラン、削除に成功したプランの数を含む 3 列のテーブルを返します。`apg_plan_mgmt.delete_plan` 関数を使用して過去 31 日以内に最小コスト計画として選択されておらず、ステータスが `Rejected` ではないすべての計画を削除する方法の例であるネストしたクエリが入っています。

```
SELECT (SELECT COUNT(*) from apg_plan_mgmt.dba_plans) total_plans,
       COUNT(*) FILTER (WHERE result = -1) failed_to_delete,
       COUNT(*) FILTER (WHERE result = 0) successfully_deleted
       FROM (
            SELECT apg_plan_mgmt.delete_plan(sql_hash, plan_hash) as result
            FROM apg_plan_mgmt.dba_plans
            WHERE last_used < (current_date - interval '31 days')
            AND status <> 'Rejected'
            ) as dba_plans ;
```

```
 total_plans | failed_to_delete | successfully_deleted
-------------+------------------+----------------------
           3 |                0 |                    2
```

詳細については、「[apg\$1plan\$1mgmt.delete\$1plan](AuroraPostgreSQL.Optimize.Functions.md#AuroraPostgreSQL.Optimize.Functions.delete_plan)」を参照してください。

有効ではなく、無効のままになると見られる計画を削除するには、`apg_plan_mgmt.validate_plans` 関数を使用します。この関数により、無効な計画を削除または無効にすることができます。詳細については、「[計画の検証](#AuroraPostgreSQL.Optimize.Maintenance.ValidatingPlans)」を参照してください。

**重要**  
無関係な計画を削除しないと、クエリプラン管理用に確保されている共有メモリが不足する可能性があります。マネージド計画に使用可能なメモリー量を制御するには、`apg_plan_mgmt.max_plans` パラメータを使用します。カスタム DB インスタンスのパラメータグループでこのパラメータを設定し、変更を有効にするために DB インスタンスを再起動します。詳細については、[apg\$1plan\$1mgmt.max\$1plans](AuroraPostgreSQL.Optimize.Parameters.md#AuroraPostgreSQL.Optimize.Parameters.max_plans) パラメータを参照してください。

## 計画の検証
<a name="AuroraPostgreSQL.Optimize.Maintenance.ValidatingPlans"></a>

利用不可能な計画を削除、または無効にするには、`apg_plan_mgmt.validate_plans` 関数を使用します。

管理計画が依存するオブジェクト (インデックスやテーブルなど) が削除されると、計画が利用不可能、または停滞となる可能性があります。ただし、削除されたオブジェクトが再作成されれば、計画が利用不可能なのは一時的です。利用不可能な計画が後で利用可能になる可能性がある場合は、利用不可能な計画を無効にするか、または削除せずに何もしないでいることができます。

利用不可能で、かつ過去 1 週間に使用されていないすべての計画を検索して削除するには、`apg_plan_mgmt.validate_plans ` 関数を以下のように使用します。

```
SELECT apg_plan_mgmt.validate_plans(sql_hash, plan_hash, 'delete') 
FROM apg_plan_mgmt.dba_plans
WHERE last_used < (current_date - interval '7 days');
```

計画を直接有効、または無効にするには、`apg_plan_mgmt.set_plan_enabled` 関数を使用します。