

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 刪除 Aurora PostgreSQL 查詢計劃
<a name="AuroraPostgreSQL.Optimize.Deleting"></a>

刪除您未使用或無效的執行計劃。如需有關刪除計劃的詳細資訊，請參閱下列各節。

**Topics**
+ [刪除計劃](#AuroraPostgreSQL.Optimize.Maintenance.DeletingPlans)
+ [驗證計劃](#AuroraPostgreSQL.Optimize.Maintenance.ValidatingPlans)

## 刪除計劃
<a name="AuroraPostgreSQL.Optimize.Maintenance.DeletingPlans"></a>

如果計劃已經超過一個月 (特別是 32 天) 未使用，系統會自動刪除這些計劃。此為 `apg_plan_mgmt.plan_retention_period` 參數的預設設定。您可以延長計劃保留期間，或從值 1 開始的較短期間。判斷上次使用計畫後經過的天數，方法是從目前日期減去 `last_used` 日期。`last_used` 日期是最佳化工具選擇計劃做為最低成本計劃或執行計劃的最近日期。日期是針對 `apg_plan_mgmt.dba_plans` 檢視中的計劃存放的。

建議您刪除長時間未使用或沒有用處的計劃。每個計劃都有 `last_used` 日期，最佳化工具每次執行計劃，或選擇計劃當作陳述式的最低成本計劃時，就會更新此日期。檢查最後 `last_used` 日期，以識別您可以安全刪除的計劃。

下列查詢會傳回三欄表格，其中包含計劃總數、無法刪除的計劃數，以及已順利刪除的計劃數。它具有巢狀查詢，這是一個範例，展示如何使用 `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\_plan\_mgmt.delete\_plan](AuroraPostgreSQL.Optimize.Functions.md#AuroraPostgreSQL.Optimize.Functions.delete_plan)。

若要刪除無效和您預期仍無效的計劃，請使用 `apg_plan_mgmt.validate_plans` 函數。此函數可讓您刪除或停用無效的計劃。如需詳細資訊，請參閱[驗證計劃](#AuroraPostgreSQL.Optimize.Maintenance.ValidatingPlans)。

**重要**  
如果您未刪除無關的計劃，最後可能會耗盡已保留給查詢計劃管理的共用記憶體。若要控制受管計劃可用的記憶體，請使用 `apg_plan_mgmt.max_plans` 參數。在自訂資料庫參數群組中設定此參數，然後重新啟動資料庫執行個體，讓變更生效。如需更多詳細資訊，請參閱 [apg\_plan\_mgmt.max\_plans](AuroraPostgreSQL.Optimize.Parameters.md#AuroraPostgreSQL.Optimize.Parameters.max_plans) 參數。

## 驗證計劃
<a name="AuroraPostgreSQL.Optimize.Maintenance.ValidatingPlans"></a>

使用 `apg_plan_mgmt.validate_plans` 函數來刪除或停用無效的計劃。

當計劃所依賴的物件 (例如索引或資料表) 移除時，計劃會變成無效或過時。不過，如果重建已移除的物件，則計劃可能只是暫時無效。如果無效的計劃後來變成有效，您可能會選擇停用無效的計劃，或什麼都不做，而非刪除它。

若要尋找並刪除所有無效且在上週未使用的計劃，請如下使用 `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` 函數。