

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

# 擷取 Aurora PostgreSQL 執行計畫
<a name="AuroraPostgreSQL.Optimize.CapturePlans"></a>

Aurora PostgreSQL 查詢計劃管理提供兩種不同的模式 (自動或手動) 來擷取查詢執行計劃。您可以透過將 `apg_plan_mgmt.capture_plans_baselines` 值設定為 `automatic` 或 `manual` 來選擇模式。您可以使用手動計劃擷取，以擷取特定 SQL 陳述式的執行計劃。您也可以使用自動計劃擷取，以擷取當您的應用程式執行時，已執行兩次或更多次的所有 (或最慢) 計劃。

當擷取計劃時，最佳化工具會將針對受管陳述式而擷取的第一個計劃設為 `approved` 狀態。最佳化工具會將針對受管陳述式而擷取的任何額外計劃設為 `unapproved` 狀態。然而，有時可能會儲存不止一個具有 `approved` 狀態的計劃。當有多個計劃針對某一陳述式被並行建立，而且該陳述式的第一個計劃被遞交之前，可能會發生此種情況。

若要控制可擷取和存放在 `dba_plans` 檢視中的計劃數量上限，請在資料庫執行個體層級參數群組中設定 `apg_plan_mgmt.max_plans` 參數。變更 `apg_plan_mgmt.max_plans` 參數之後需要重新啟動資料庫執行個體，新的值才會生效。如需更多詳細資訊，請參閱 [apg\$1plan\$1mgmt.max\$1plans](AuroraPostgreSQL.Optimize.Parameters.md#AuroraPostgreSQL.Optimize.Parameters.max_plans) 參數。

## 針對特定 SQL 陳述式來手動擷取計劃
<a name="AuroraPostgreSQL.Optimize.CapturePlans.Manual"></a>

如果您有一組已知的 SQL 陳述式需要管理，請將陳述式放入 SQL 指令碼檔案中，然後手動擷取計劃。以下顯示的 psql 範例示範如何針對一組 SQL 陳述式來手動擷取查詢計劃。

```
psql> SET apg_plan_mgmt.capture_plan_baselines = manual;
psql> \i my-statements.sql 
psql> SET apg_plan_mgmt.capture_plan_baselines = off;
```

在擷取每個 SQL 陳述式的計劃之後，最佳化工具會在 `apg_plan_mgmt.dba_plans` 檢視中新增一列。

我們建議您在 SQL 指令碼檔案中使用 EXPLAIN 或 EXPLAIN EXECUTE 陳述式。請確認您在參數值中容納了足夠的變化，以擷取您關心的所有計劃。

如果您知道比最佳化工具的最低成本計劃更好的計劃，您可以強制最佳化工具使用更好的計劃。若要這麼做，請指定一個或多個最佳化工具提示。如需更多詳細資訊，請參閱 [使用 pg\$1hint\$1plan 修正計劃](AuroraPostgreSQL.Optimize.Maintenance.md#AuroraPostgreSQL.Optimize.Maintenance.pg_hint_plan)。若要比較 `unapproved` 和 `approved` 計劃的效能，並核准、拒絕或刪除它們，請參閱[評估計劃效能](AuroraPostgreSQL.Optimize.Maintenance.md#AuroraPostgreSQL.Optimize.Maintenance.EvaluatingPerformance)。

## 自動擷取計劃
<a name="AuroraPostgreSQL.Optimize.CapturePlans.Automatic"></a>

在如下的情況中，請使用自動計劃擷取：
+ 您不知道您想管理的特定 SQL 陳述式。
+ 您有數百或數千個 SQL 陳述式需要管理。
+ 您的應用程式使用用戶端 API。例如，JDBC 使用未命名的備妥陳述式或大量模式陳述式，但無法以 psql 表達。

**自動擷取計劃**

1. 在資料庫執行個體層級參數群組中，將 `apg_plan_mgmt.capture_plan_baselines` 設為 `automatic`，以啟用自動計劃擷取。如需詳細資訊，請參閱[修改 Amazon Aurora 中的資料庫參數群組中的參數](USER_WorkingWithParamGroups.Modifying.md)。

1. 當應用程式執行時，最佳化工具會針對至少執行兩次的每個 SQL 陳述式來擷取計劃。

   當應用程式以預設查詢計劃管理參數設定來執行時，最佳化工具會針對至少執行兩次的每個 SQL 陳述式來擷取計劃。使用預設值時擷取所有計劃的執行時間額外負荷非常小，適用於生產環境。

**停用自動計劃擷取**
+ 從資料庫執行個體層級參數群組，將 `apg_plan_mgmt.capture_plan_baselines` 參數設為 `off`。

若要測量未核准計劃的效能，並核准、拒絕或刪除它們，請參閱[評估計劃效能](AuroraPostgreSQL.Optimize.Maintenance.md#AuroraPostgreSQL.Optimize.Maintenance.EvaluatingPerformance)。