

# RDS for Oracle의 실시간 SQL Plan Management
<a name="Oracle.RealTimeSPM"></a>

Oracle Database 26ai(26.0.0.0)부터 Amazon RDS for Oracle은 실시간 SQL Plan Management를 지원합니다. 이 기능은 실행 계획 변경 사항을 감지하고, 이전 계획과 비교하여 평가하고, 필요에 따라 SQL 계획 기준에서 최고 성능의 계획을 선택하여 SQL 성능 회귀를 방지합니다. 이 프로세스는 투명하며 수동 개입이 필요하지 않습니다.

RDS for Oracle에서 실시간 SQL Plan Management를 활성화하려면 `DBMS_SPM.CONFIGURE`를 사용하여 auto evolve task를 켭니다. 그런 다음 `rdsadmin.rdsadmin_spm_util` 패키지를 사용하여 SYS 소유 태스크 파라미터를 구성합니다.

**Topics**
+ [개요](#Oracle.RealTimeSPM.Overview)
+ [요구 사항](#Oracle.RealTimeSPM.Requirements)
+ [실시간 SQL Plan Management 활성화](#Oracle.RealTimeSPM.Enabling)
+ [구성 확인](#Oracle.RealTimeSPM.Verifying)
+ [실시간 SQL Plan Management 비활성화](#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>

SQL 성능 회귀는 Oracle 옵티마이저가 이전 계획보다 성능이 떨어지는 새 실행 계획을 선택할 때 발생합니다. 실시간 SQL Plan Management는 이러한 회귀를 자동으로 탐지 및 방지합니다.

실시간 SQL Plan Management가 활성화되면 데이터베이스는 다음을 수행합니다.

1. 실행 계획 변경 사항을 실시간으로 감지합니다.

1. 이전 계획과 비교하여 새 계획의 성능을 평가합니다.

1. SQL 계획 기준을 자동으로 생성하거나 업데이트합니다.

1. 회귀를 방지하기 위해 가장 성능이 좋은 계획을 선택합니다.

## 요구 사항
<a name="Oracle.RealTimeSPM.Requirements"></a>

실시간 SQL Plan Management를 사용하려면 DB 인스턴스가 다음 요구 사항을 충족해야 합니다.
+ Oracle Database 26ai 이상
+ Oracle Enterprise Edition

## 실시간 SQL Plan Management 활성화
<a name="Oracle.RealTimeSPM.Enabling"></a>

실시간 SQL Plan Management를 활성화하려면 다음 두 단계를 완료합니다.

### 1단계: auto SPM evolve task 켜기
<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');
```

## 구성 확인
<a name="Oracle.RealTimeSPM.Verifying"></a>

실시간 SQL Plan Management가 활성화되어 있는지 확인하려면 다음 쿼리를 실행합니다.

```
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 Plan Management 비활성화
<a name="Oracle.RealTimeSPM.Disabling"></a>

실시간 SQL Plan Management를 비활성화하려면 다음 문을 실행합니다.

```
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'` | `SYS_AUTO_SPM_EVOLVE_TASK`의 `ACCEPT_PLANS` 파라미터를 설정합니다. 유효 값은 `'TRUE'` 및 `'FALSE'`입니다. | 
| `set_evolve_task_alternate_plan_source` | `p_value` | `'AUTO'` | `SYS_AUTO_SPM_EVOLVE_TASK`의 `ALTERNATE_PLAN_SOURCE` 파라미터를 설정합니다. 유효한 값은 `'AUTO'`, `'CURSOR_CACHE'`, `'AUTOMATIC_WORKLOAD_REPOSITORY'` 및 `'SQL_TUNING_SET'`입니다. | 

## SQL 계획 기준 모니터링
<a name="Oracle.RealTimeSPM.Monitoring"></a>

실시간 SQL Plan Management를 활성화한 후 데이터베이스가 자동으로 관리하는 계획 기준을 모니터링할 수 있습니다.

```
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 Plan Management를 사용할 때는 다음 사항을 고려하세요.
+ DBA 역할이 있는 사용자는 `DBMS_SPM.CONFIGURE`를 직접적으로 호출할 수 있습니다. 이 단계에서는 래퍼가 필요하지 않습니다.
+ 마스터 사용자는 SYS 소유 어드바이저 태스크에 직접 액세스할 수 없으므로 SYS 소유 `SYS_AUTO_SPM_EVOLVE_TASK` 태스크에서 태스크 파라미터를 구성하는 데 `rdsadmin.rdsadmin_spm_util` 절차가 필요합니다.
+ 실시간 SQL Plan Management는 투명하게 작동합니다. 애플리케이션 코드를 변경할 필요가 없습니다.
+ SQL 계획 기준은 SYSAUX 테이블스페이스의 공간을 사용합니다. 기능을 활성화한 후 SYSAUX 사용량을 모니터링합니다.
+ `DBMS_SPM.CONFIGURE`에 전달되는 파라미터 값(예: `'AUTO'` 및 `'OFF'`)은 대/소문자를 구분합니다. 대문자 값을 사용합니다.

## 관련 리소스
<a name="Oracle.RealTimeSPM.Resources"></a>
+ Oracle Database 설명서의 [DBMS\_SPM](https://docs.oracle.com/en/database/oracle/oracle-database/26/arpls/DBMS_SPM.html)
+ Oracle Database 설명서의 [SQL 계획 기준 관리](https://docs.oracle.com/en/database/oracle/oracle-database/26/tgsql/managing-sql-plan-baselines.html)