

# Aurora PostgreSQL 실행 계획 캡처
<a name="AuroraPostgreSQL.Optimize.CapturePlans"></a>

Aurora PostgreSQL 쿼리 계획 관리에서는 쿼리 실행 계획을 캡처하기 위한 두 가지 모드, 자동 또는 수동을 제공합니다. `apg_plan_mgmt.capture_plans_baselines`의 값을 `automatic` 또는 `manual`로 설정하여 모드를 선택합니다. 수동 계획 캡처를 사용해 특정 SQL 문에 대한 실행 계획을 캡처할 수 있습니다. 또는 자동 계획 캡처를 사용하여 애플리케이션이 실행될 때 두 번 이상 실행되는 모든 (또는 가장 느린) 계획을 캡처할 수 있습니다.

계획을 캡처하면 최적화 프로그램이 관리형 설명문에 대해 캡처된 첫 번째 계획의 상태를 `approved`로 설정합니다. 최적화 프로그램은 관리형 설명문에 대해 캡처된 추가 계획의 상태를 항상 `unapproved`로 설정합니다. 그러나 두 가지 이상의 계획이 `approved` 상태로 저장되는 경우가 가끔 있을 수 있습니다. 이런 일은 설명문에 대해 여러 계획이 병렬적으로 생성될 때와 설명문의 첫 번째 계획이 커밋되기 전에 발생할 수 있습니다.

`dba_plans` 보기에 캡처 및 저장할 수 있는 최대 계획 수를 제어하려면 DB 인스턴스 수준의 파라미터 그룹에서 `apg_plan_mgmt.max_plans` 파라미터를 설정합니다. `apg_plan_mgmt.max_plans` 파라미터를 변경하는 경우 새 값을 적용하려면 DB 인스턴스를 재부팅해야 합니다. 자세한 내용은 [apg\$1plan\$1mgmt.max\$1plans](AuroraPostgreSQL.Optimize.Parameters.md#AuroraPostgreSQL.Optimize.Parameters.max_plans) 파라미터를 참조하세요.

## 특정 SQL 문에 대해 계획을 수동으로 캡처
<a name="AuroraPostgreSQL.Optimize.CapturePlans.Manual"></a>

관리해야 할 SQL 문 세트를 알고 있는 경우 이러한 설명문을 SQL 스크립트 파일에 추가한 후 계획을 수동으로 캡처합니다. 다음은 SQL 문 세트에 대해 쿼리 계획을 수동으로 캡처하는 방법을 보여주는 psql 예제입니다.

```
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. DB 인스턴스 수준의 파라미터 그룹에서 `apg_plan_mgmt.capture_plan_baselines`를 `automatic`으로 설정하여 자동 계획 캡처를 켭니다. 자세한 내용은 [Amazon Aurora에서 DB 파라미터 그룹의 파라미터 수정](USER_WorkingWithParamGroups.Modifying.md) 섹션을 참조하세요.

1. 애플리케이션이 실행되면 최적화 프로그램이 두 번 이상 실행되는 각 SQL 문에 대해 계획을 캡처합니다.

   애플리케이션이 기본 쿼리 계획 관리 파라미터 설정으로 실행되면 최적화 프로그램이 두 번 이상 실행되는 각 SQL 문에 대해 계획을 캡처합니다. 기본값 사용 중 모든 계획을 캡처하는 작업은 실행 시간 오버헤드가 거의 발생하지 않으며 프로덕션 상태에서 활성화할 수 있습니다.

**자동 계획 캡처를 끄려면**
+ DB 인스턴스 수준의 파라미터 그룹에서 `apg_plan_mgmt.capture_plan_baselines` 파라미터를 `off`로 설정합니다.

미승인 계획의 성능을 측정하고 이러한 계획을 승인, 거부 또는 삭제하려면 [계획 성능 평가](AuroraPostgreSQL.Optimize.Maintenance.md#AuroraPostgreSQL.Optimize.Maintenance.EvaluatingPerformance) 단원을 참조하세요.