

# 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` 날짜를 확인하세요.

다음 쿼리는 총 계획 수, 삭제에 실패한 계획 및 성공적으로 삭제된 계획이 포함된 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\_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` 파라미터를 사용합니다. 사용자 지정 DB 파라미터 그룹에서 이 파라미터를 설정하고 DB 인스턴스를 재부팅하여 변경 내용을 적용합니다. 자세한 내용은 [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` 함수를 사용합니다.