

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

# RDS for Oracle 中的即時 SQL 計劃管理
<a name="Oracle.RealTimeSPM"></a>

從 Oracle Database 26ai (26.0.0.0) 開始，Amazon RDS for Oracle 支援即時 SQL 計劃管理。此功能可透過偵測執行計畫變更、針對先前的計畫進行評估，以及視需要從 SQL 計畫基準選取效能最佳的計畫，來防止 SQL 效能迴歸。此程序是透明的，不需要手動介入。

若要在 RDS for Oracle 上啟用即時 SQL 計劃管理，您可以使用 `DBMS_SPM.CONFIGURE`開啟自動演進任務。然後，您可以使用 `rdsadmin.rdsadmin_spm_util`套件來設定 SYS 擁有的任務參數。

**Topics**
+ [概觀](#Oracle.RealTimeSPM.Overview)
+ [要求](#Oracle.RealTimeSPM.Requirements)
+ [啟用即時 SQL 計劃管理](#Oracle.RealTimeSPM.Enabling)
+ [驗證 DNS 組態](#Oracle.RealTimeSPM.Verifying)
+ [停用即時 SQL 計畫管理](#Oracle.RealTimeSPM.Disabling)
+ [rdsadmin\_spm\_util 程序](#Oracle.RealTimeSPM.Procedures)
+ [監控 SQL 計劃基準](#Oracle.RealTimeSPM.Monitoring)
+ [考量事項](#Oracle.RealTimeSPM.Considerations)
+ [相關資源](#Oracle.RealTimeSPM.Resources)

## 概觀
<a name="Oracle.RealTimeSPM.Overview"></a>

當 Oracle 最佳化工具選擇比先前計劃更差的新執行計劃時，就會發生 SQL 效能迴歸。即時 SQL 計劃管理可自動偵測和預防這些迴歸。

啟用即時 SQL 計劃管理時，資料庫會執行下列動作：

1. 即時偵測執行計畫變更。

1. 針對先前的計劃，評估新計劃的效能。

1. 自動建立或更新 SQL 計劃基準。

1. 選取效能最佳的計劃以防止迴歸。

## 要求
<a name="Oracle.RealTimeSPM.Requirements"></a>

若要使用即時 SQL 計劃管理，您的資料庫執行個體必須符合下列要求：
+ Oracle 資料庫 26ai 或更新版本
+ Oracle Enterprise Edition

## 啟用即時 SQL 計劃管理
<a name="Oracle.RealTimeSPM.Enabling"></a>

若要啟用即時 SQL 計劃管理，請完成下列兩個步驟。

### 步驟 1：開啟自動 SPM 演進任務
<a name="Oracle.RealTimeSPM.Enabling.Step1"></a>

以主要使用者或具有 DBA 角色的使用者身分執行下列陳述式：

```
BEGIN
  DBMS_SPM.CONFIGURE('AUTO_SPM_EVOLVE_TASK', 'AUTO');
END;
/
```

### 步驟 2：設定 SYS 擁有的任務參數
<a name="Oracle.RealTimeSPM.Enabling.Step2"></a>

`SYS_AUTO_SPM_EVOLVE_TASK` 任務由 SYS 擁有。RDS for Oracle 為此目的提供 `rdsadmin.rdsadmin_spm_util`套件。

`ACCEPT_PLANS` 設定為 ，`TRUE`以便資料庫自動接受進化的計劃：

```
EXEC rdsadmin.rdsadmin_spm_util.set_evolve_task_accept_plans('TRUE');
```

（選用） 將替代計劃來源設定為 `AUTO`：

```
EXEC rdsadmin.rdsadmin_spm_util.set_evolve_task_alternate_plan_source('AUTO');
```

## 驗證 DNS 組態
<a name="Oracle.RealTimeSPM.Verifying"></a>

若要確認已啟用即時 SQL 計劃管理，請執行下列查詢：

```
SELECT parameter_value
FROM DBA_SQL_MANAGEMENT_CONFIG
WHERE parameter_name = 'AUTO_SPM_EVOLVE_TASK';
```

查詢會傳回 `AUTO`。

若要驗證任務參數設定，請執行下列查詢：

```
SELECT parameter_name, parameter_value
FROM DBA_ADVISOR_PARAMETERS
WHERE task_name = 'SYS_AUTO_SPM_EVOLVE_TASK'
  AND parameter_name IN ('ACCEPT_PLANS', 'ALTERNATE_PLAN_SOURCE');
```

## 停用即時 SQL 計畫管理
<a name="Oracle.RealTimeSPM.Disabling"></a>

若要停用即時 SQL 計劃管理，請執行下列陳述式：

```
BEGIN
  DBMS_SPM.CONFIGURE('AUTO_SPM_EVOLVE_TASK', 'OFF');
END;
/
```

## rdsadmin\_spm\_util 程序
<a name="Oracle.RealTimeSPM.Procedures"></a>

`rdsadmin.rdsadmin_spm_util` 套件提供下列程序。


**rdsadmin\_spm\_util 程序**  

| 程序 | 參數 | 預設 | 說明 | 
| --- | --- | --- | --- | 
| `set_evolve_task_accept_plans` | `p_value` | `'TRUE'` | 設定 的 `ACCEPT_PLANS` 參數`SYS_AUTO_SPM_EVOLVE_TASK`。有效值為 `'TRUE'` 和 `'FALSE'`。 | 
| `set_evolve_task_alternate_plan_source` | `p_value` | `'AUTO'` | 設定 的 `ALTERNATE_PLAN_SOURCE` 參數`SYS_AUTO_SPM_EVOLVE_TASK`。有效值為 `'AUTO'`、`'CURSOR_CACHE'`、`'AUTOMATIC_WORKLOAD_REPOSITORY'`、`'SQL_TUNING_SET'`。 | 

## 監控 SQL 計劃基準
<a name="Oracle.RealTimeSPM.Monitoring"></a>

啟用即時 SQL 計劃管理之後，您可以監控資料庫自動管理的計劃基準：

```
SELECT SQL_HANDLE, PLAN_NAME, ENABLED, ACCEPTED, AUTOPURGE
FROM DBA_SQL_PLAN_BASELINES
ORDER BY LAST_MODIFIED DESC;
```

## 考量事項
<a name="Oracle.RealTimeSPM.Considerations"></a>

當您使用即時 SQL 計劃管理時，請考慮下列事項：
+ 具有 DBA 角色的使用者可以`DBMS_SPM.CONFIGURE`直接呼叫 。此步驟不需要包裝函式。
+ 在 SYS 擁有的任務上設定`SYS_AUTO_SPM_EVOLVE_TASK`任務參數需要這些`rdsadmin.rdsadmin_spm_util`程序，因為主要使用者無法直接存取 SYS 擁有的顧問任務。
+ 即時 SQL 計劃管理以透明的方式運作。您不需要變更應用程式程式碼。
+ SQL 計劃基準會耗用 SYSAUX 資料表空間中的空間。啟用此功能後，監控 SYSAUX 用量。
+ 傳遞給 `DBMS_SPM.CONFIGURE`（例如 `'AUTO'`和 `'OFF'`) 的參數值區分大小寫。使用大寫值。

## 相關資源
<a name="Oracle.RealTimeSPM.Resources"></a>
+ Oracle 資料庫文件中的 [DBMS\_SPM](https://docs.oracle.com/en/database/oracle/oracle-database/26/arpls/DBMS_SPM.html) 
+ Oracle 資料庫文件中的[管理 SQL 計劃基準](https://docs.oracle.com/en/database/oracle/oracle-database/26/tgsql/managing-sql-plan-baselines.html) 