Aurora PostgreSQL 관리형 계획 사용
최적화 프로그램에서 관리형 설명문에 대해 캡처한 계획을 사용하려면 파라미터 apg_plan_mgmt.use_plan_baselines
를 true
로 설정합니다. 다음은 로컬 인스턴스 예제입니다.
SET apg_plan_mgmt.use_plan_baselines = true;
애플리케이션이 실행되는 동안 이 설정을 사용하면 최적화 프로그램이 각각의 관리형 문에 대해 유효하고 활성화된 최소 비용, 기본 또는 승인된 계획을 사용합니다.
최적화 프로그램이 선택한 계획 분석
apg_plan_mgmt.use_plan_baselines
파라미터가 true
로 설정된 경우 EXPLAIN ANALYZE SQL 문을 사용하여 최적화 프로그램에서 해당 설명문을 실행해야 하는 경우에 사용할 계획을 표시할 수 있습니다. 다음은 예입니다.
EXPLAIN ANALYZE EXECUTE rangeQuery (1,10000);
QUERY PLAN
--------------------------------------------------------------------------
Aggregate (cost=393.29..393.30 rows=1 width=8) (actual time=7.251..7.251 rows=1 loops=1)
-> Index Only Scan using t1_pkey on t1 t (cost=0.29..368.29 rows=10000 width=0) (actual time=0.061..4.859 rows=10000 loops=1)
Index Cond: ((id >= 1) AND (id <= 10000))
Heap Fetches: 10000
Planning time: 1.408 ms
Execution time: 7.291 ms
Note: An Approved plan was used instead of the minimum cost plan.
SQL Hash: 1984047223, Plan Hash: 512153379
출력에는 실행할 기준의 승인된 계획이 표시됩니다. 그러나 출력에 비용이 더 저렴한 계획을 찾았다고 나와 있습니다. 이 경우, 계획 자동 캡처에 설명된 바와 같이 자동 계획 캡처를 켜서 이 새로운 최소 비용 계획을 캡처합니다.
새 계획은 항상 최적화 프로그램에 Unapproved
로 캡처됩니다. apg_plan_mgmt.evolve_plan_baselines
함수를 사용하여 계획을 비교하고 승인됨, 거부됨 또는 비활성화됨으로 변경할 수 있습니다. 자세한 정보는 계획 성능 평가을 참조하십시오.
최적화 프로그램에서 실행할 계획을 선택하는 방식.
실행 계획의 비용은 최적화 프로그램에서 서로 다른 계획을 비교할 때 계산하는 추정치입니다. 계획의 비용을 계산할 때 최적화 프로그램은 해당 계획에 필요한 CPU 및 I/O 작업과 같은 요소를 포함합니다. PostgreSQL 쿼리 플래너 비용 견적에 대해 자세히 알아보려면 쿼리 계획
다음 이미지는 쿼리 계획 관리가 활성 상태일 때와 그렇지 않을 때 주어진 SQL 문에 대해 계획이 선택되는 방법을 보여줍니다.
이 흐름은 다음과 같습니다.
최적화 프로그램은 SQL 문에 대한 최소 비용 계획을 생성합니다.
쿼리 계획 관리가 활성화되어 있지 않으면 최적화 프로그램의 계획(A. Run Optimizer's plan)이 즉시 실행됩니다. 쿼리 계획 관리는 및 매개변수가 모두 기본 설정(각각 "off" 및 "false")일 때 비활성화됩니다.
그렇지 않으면 쿼리 계획 관리가 활성화됩니다. 이 경우 SQL 문과 이에 대한 최적화 프로그램의 계획은 계획이 선택되기 전에 추가로 평가됩니다.
작은 정보
apg_plan_mgmt
역할이 있는 데이터베이스 사용자는 사전에 계획을 비교하고, 계획의 상태를 변경하고, 필요에 따라 특정 계획을 강제로 사용할 수 있습니다. 자세한 정보는 Aurora PostgreSQL 쿼리 계획 개선을 참조하십시오.SQL 문에는 이전에 쿼리 계획 관리에 의해 저장되었던 계획이 이미 있을 수 있습니다. 계획은 계획을 생성하는 데 사용된 SQL 문에 대한 정보와 함께
apg_plan_mgmt.dba_plans
에 저장됩니다. 계획에 대한 정보에는 해당 상태가 포함됩니다. 계획 상태에 따라 다음과 같이 사용 여부가 결정될 수 있습니다.계획이 SQL 문에 대해 저장된 계획에 없으면 주어진 SQL 문에 대한 최적화 프로그램에서 이 특정 계획이 처음 생성되었음을 의미합니다. 계획이 캡처 계획 처리 (4)로 전송됩니다.
저장된 계획 중 해당 계획이 승인됨 또는 선호되면 계획(A. Run Optimizer's plan)이 실행됩니다.
계획이 저장된 계획에 있지만 승인 또는 선호도가 아닌 경우 계획은 캡처 계획 처리(4)로 전송됩니다.
-
주어진 SQL 문에 대해 처음으로 계획을 캡처할 때 계획의 상태는 항상 승인됨(P1)으로 설정됩니다. 최적화 프로그램은 이후에 동일한 SQL 문에 대해 동일한 계획을 생성하면 해당 계획의 상태가 미승인(P1+n)으로 변경됩니다.
계획이 캡처되고 상태가 업데이트되면 평가가 다음 단계(5)에서 계속됩니다.
계획의 기준선은 SQL 문의 기록과 다양한 상태에서의 계획으로 구성됩니다. 쿼리 계획 관리에서는 계획을 선택할 때 다음과 같이 계획 기준선 사용 옵션의 설정 여부에 따라 기준을 고려할 수 있습니다.
apg_plan_mgmt.use_plan_baselines
파라미터가 기본값(false
)으로 설정된 경우 계획 기준선 사용은 'off'입니다. 계획은 실행되기 전에 기준선과 비교되지 않습니다(A. Run Optimizer의 계획).apg_plan_mgmt.use_plan_baselines
파라미터가true
로 설정된 경우 계획 기준선 사용이 'on'입니다. 계획은 기준선(6)을 사용하여 추가로 평가됩니다.
계획은 기준선의 명령문에 대한 다른 계획과 비교됩니다.
최적화 프로그램의 계획이 베이스라인에 있는 계획들 중이라면 그 상태를 체크한다(7a).
최적화 프로그램의 계획이 기준선의 계획에 없는 경우 해당 계획은 명령문의 계획에 새
Unapproved
계획으로 추가됩니다.
계획의 상태는 승인되지 않은 경우에만 확인하기 위해 확인됩니다.
계획의 상태가 미승인인 경우 계획의 예상 비용은 승인되지 않은 실행 계획 임계값에 대해 지정된 예상 비용과 비교됩니다.
계획의 예상 비용이 임계값 미만인 경우 미승인 계획(A. Run Optimizer의 계획)이라도 최적화 프로그램은 이를 사용합니다. 일반적으로 최적화 프로그램은 미승인 계획을 실행하지 않습니다. 그러나 파라미터가 비용 임계값을 지정하면 최적화 프로그램은 승인되지 않은 계획의 비용을 임계값과 비교합니다. 예상 비용이 임계값보다 작으면 최적화 프로그램이 계획을 실행합니다. 자세한 정보는 apg_plan_mgmt.unapproved_plan_execution_threshold을 참조하십시오.
계획의 예상 비용이 임계값 미만이 아니면 계획의 다른 속성이 확인됩니다(8a).
계획의 상태가 미승인 상태가 아닌 경우 다른 속성이 확인됩니다(8a).
최적화 프로그램은 비활성화된 계획을 사용하지 않습니다. 즉,
enable
속성이 'f'(false)로 설정된 계획입니다. 또한 최적화 프로그램은 상태가 거부됨인 계획을 사용하지 않습니다.최적화 프로그램은 유효하지 않은 계획을 사용할 수 없습니다. 인덱스 및 테이블 파티션과 같이 계획이 의존하는 개체가 제거되거나 삭제되면 계획이 유효하지 않게 될 수 있습니다.
명령문에 활성화되고 유효한 선호 계획이 있는 경우 최적화 프로그램은 이 SQL 문에 대해 저장된 선호 계획 중에서 최소 비용 계획을 선택합니다. 그런 다음 최적화 프로그램은 최소 비용 선호 계획을 실행합니다.
명령문에 활성화되고 유효한 기본 계획이 없으면 다음 단계(9)에서 평가됩니다.
명령문에 활성화되고 유효한 승인됨 계획이 있는 경우 최적화 프로그램은 이 SQL 문에 대해 저장된 승인됨 계획 중에서 최소 비용 계획을 선택합니다. 그런 다음 최적화 프로그램은 최소 비용 승인된 계획을 실행합니다.
명령문에 유효하고 활성화된 승인된 계획이 없으면 최적화 프로그램은 최소 비용 계획을 사용합니다(A. 옵티마이저의 계획 실행).