Aurora PostgreSQL 쿼리 계획 관리를 위한 함수 참조
apg_plan_mgmt
확장은 다음 함수를 제공합니다.
함수
apg_plan_mgmt.copy_outline
지정된 SQL 계획 해시 및 계획 아웃라인을 대상 SQL 계획 해시 및 아웃라인에 복사하여 대상의 계획 해시 및 아웃라인을 덮어씁니다. 이 함수는 apg_plan_mgmt
2.3 이상 릴리스에서 사용할 수 있습니다.
구문
apg_plan_mgmt.copy_outline(
source_sql_hash,
source_plan_hash,
target_sql_hash,
target_plan_hash,
force_update_target_plan_hash
)
반환 값
복사가 성공하면 0을 반환합니다. 입력이 잘못된 경우 예외를 발생시킵니다.
Parameters
파라미터 | 설명 |
---|---|
source_sql_hash
|
대상 쿼리에 복사할 plan_hash 와 관련된 sql_hash ID입니다. |
source_plan_hash |
대상 쿼리에 복사할 plan_hash ID입니다. |
target_sql_hash |
소스 플랜 해시 및 아웃라인으로 업데이트할 쿼리의 sql_hash ID입니다. |
target_plan_hash |
소스 플랜 해시 및 아웃라인으로 업데이트할 쿼리의 plan_hash ID입니다. |
force_update_target_plan_hash |
(선택 사항) target_sql_hash 에 대한 소스 계획을 재현할 수 없는 경우에도 쿼리의 target_plan_hash ID가 업데이트됩니다. true로 설정하면 함수를 사용하여 관계 이름과 열이 일치하는 스키마 간에 계획을 복사할 수 있습니다. |
사용 노트
이 함수를 사용하면 힌트를 사용하는 계획 해시 및 계획 개요를 다른 유사한 문에 복사할 수 있으므로, 대상 문에서 발생할 때마다 인라인 힌트 문을 사용하지 않아도 됩니다. 업데이트된 대상 쿼리 때문에 잘못된 계획이 생성되는 경우, 이 함수는 오류를 발생시키고 시도한 업데이트를 롤백합니다.
apg_plan_mgmt.delete_plan
관리형 계획을 삭제합니다.
구문
apg_plan_mgmt.delete_plan(
sql_hash,
plan_hash
)
반환 값
삭제가 성공한 경우 0을 반환하고, 실패한 경우 -1을 반환합니다.
Parameters
파라미터 | 설명 |
---|---|
sql_hash
|
계획의 관리형 SQL 문의 sql_hash ID. |
plan_hash |
관리형 계획의 plan_hash ID. |
apg_plan_mgmt.evolve_plan_baselines
이미 승인된 계획이 더 빠른지 여부 또는 쿼리 최적화 프로그램에서 최소 비용 계획으로 식별된 계획이 더 빠른지 여부를 확인합니다.
구문
apg_plan_mgmt.evolve_plan_baselines(
sql_hash,
plan_hash,
min_speedup_factor,
action
)
반환 값
승인된 최상의 계획보다 빠르지 않은 계획 수.
Parameters
파라미터 | 설명 |
---|---|
sql_hash |
계획의 관리형 SQL 문의 sql_hash ID. |
plan_hash |
관리형 계획의 plan_hash ID. sql_hash ID 값이 동일한 모든 계획의 평균을 구하려면 NULL을 사용합니다. |
min_speedup_factor |
최소 속도 향상 인수는 계획이 승인되려면 이미 승인된 계획 중 최상의 계획보다 몇 배 더 빨라야 하는지를 지정합니다. 또는 거부되거나 비활성화되려면 몇 배 더 느려야 하는지를 지정할 수도 있습니다. 이 값은 양수 부동 값입니다. |
action |
함수가 수행해야 할 작업입니다. 유효 값에는 다음이 포함됩니다. 대/소문자를 구분하지 않습니다.
|
사용 노트
계획 + 실행 시간이 설정한 인수만큼 최상의 승인된 계획보다 더 빠른지 여부에 따라 지정된 계획을 승인됨, 거부됨 또는 비활성화됨으로 설정합니다. 이 작업 파라미터를 'approve'
또는 'reject'
로 설정하여 성능 기준을 충족하는 계획을 자동으로 승인하거나 거부할 수 있습니다. 또는 "(빈 문자열)로 설정하여 성능 실험을 수행한 후 보고서만 생성하고 아무런 작업도 취하지 않을 수 있습니다.
최근에 실행된 계획에 대해 apg_plan_mgmt.evolve_plan_baselines
함수를 무의미하게 다시 실행하는 일을 방지할 수 있습니다. 이를 위해서는 최근에 생성한 미승인 계획까지만 계획을 제한하십시오. 또는 최근 apg_plan_mgmt.evolve_plan_baselines
타임스탬프가 있는 승인된 계획에서만 last_verified
함수를 실행하지 않도록 할 수 있습니다.
성능 실험을 수행하여 기준 내 다른 계획과 각 계획의 계획 + 실행 시간을 비교합니다. 경우에 따라서는 설명문에 대해 계획 하나만 있고 해당 계획이 승인된 계획일 수 있습니다. 이러한 경우에는 계획의 계획 + 실행 시간과 아무런 계획도 사용하지 않을 때의 계획 + 실행 시간을 비교합니다.
각 계획의 증분형 이점(또는 단점)이 apg_plan_mgmt.dba_plans
열의 total_time_benefit_ms
보기에 기록됩니다. 이 값이 양수이면 기준에 이 계획을 포함할 경우 주목할 만한 성능 개선이 있는 것입니다.
각 후보 계획의 계획 + 실행 시간을 수집할 뿐만 아니라, last_verified
보기의 apg_plan_mgmt.dba_plans
열이 current_timestamp
로 업데이트됩니다. last_verified
타임스탬프를 사용하면 최근에 성능이 확인된 계획에 대해 이 함수가 다시 실행되지 않도록 할 수 있습니다.
apg_plan_mgmt.get_explain_plan
지정한 SQL 문에 대한 EXPLAIN
문의 텍스트를 생성합니다.
구문
apg_plan_mgmt.get_explain_plan(
sql_hash,
plan_hash,
[explainOptionList]
)
반환 값
지정한 SQL 문에 대한 런타임 통계를 반환합니다. 간단한 explainOptionList
계획을 반환하려면 EXPLAIN
없이 사용합니다.
Parameters
파라미터 | 설명 |
---|---|
sql_hash
|
계획의 관리형 SQL 문의 sql_hash ID. |
plan_hash |
관리형 계획의 plan_hash ID. |
explainOptionList |
설명 옵션을 쉼표로 구분한 목록입니다. 유효한 값으로는 |
사용 노트
explainOptionList
의 경우 EXPLAIN
문에 사용하는 것과 동일한 옵션 중 하나를 사용할 수 있습니다. Aurora PostgreSQL 옵티마이저는 사용자가 EXPLAIN
문에 제공항하는 옵션 목록을 연결합니다.
apg_plan_mgmt.plan_last_used
공유 메모리에서 지정된 계획의 last_used
날짜를 반환합니다.
참고
공유 메모리의 값은 DB 클러스터의 기본 DB 인스턴스에서 항상 최신 상태입니다. 값은 apg_plan_mgmt.dba_plans
뷰의 last_used
열에 주기적으로 플러시됩니다.
구문
apg_plan_mgmt.plan_last_used(
sql_hash,
plan_hash
)
반환 값
last_used
날짜를 반환합니다.
Parameters
파라미터 | 설명 |
---|---|
sql_hash
|
계획의 관리형 SQL 문의 sql_hash ID. |
plan_hash |
관리형 계획의 plan_hash ID. |
apg_plan_mgmt.reload
계획을 apg_plan_mgmt.dba_plans
보기에서 공유 메모리로 다시 로드합니다.
구문
apg_plan_mgmt.reload()
반환 값
없음.
Parameters
없음.
사용 노트
다음 상황의 경우 reload
를 호출합니다.
-
새 계획이 복제본으로 전파될 때까지 기다리기 보다는 이 함수를 사용하여 읽기 전용 복제본의 공유 메모리를 즉시 새로 고칩니다.
-
관리형 계획을 가져온 후에 사용합니다.
apg_plan_mgmt.set_plan_enabled
관리형 계획을 활성화하거나 비활성화합니다.
구문
apg_plan_mgmt.set_plan_enabled(
sql_hash,
plan_hash,
[true | false]
)
반환 값
설정이 성공한 경우 0을 반환하고, 실패한 경우 -1을 반환합니다.
Parameters
파라미터 | 설명 |
---|---|
sql_hash |
계획의 관리형 SQL 문의 sql_hash ID. |
plan_hash |
관리형 계획의 plan_hash ID. |
enabled |
부울 값(true 또는 false):
|
apg_plan_mgmt.set_plan_status
관리된 계획의 상태를 Approved
, Unapproved
, Rejected
또는 Preferred
로 설정합니다.
구문
apg_plan_mgmt.set_plan_status(
sql_hash,
plan_hash,
status
)
반환 값
설정이 성공한 경우 0을 반환하고, 실패한 경우 -1을 반환합니다.
Parameters
파라미터 | 설명 |
---|---|
sql_hash |
계획의 관리형 SQL 문의 sql_hash ID. |
plan_hash |
관리형 계획의 plan_hash ID. |
status |
다음 값 중 하나를 가진 문자열:
대문자를 사용하든 소문자를 사용하든 |
apg_plan_mgmt.update_plans_last_used
공유 메모리에 저장됭 last_used
날짜로 계획 테이블을 즉시 업데이트합니다.
구문
apg_plan_mgmt.update_plans_last_used()
반환 값
없음.
Parameters
없음.
사용 노트
dba_plans.last_used
열에 대항하는 쿼리가 가장 최신 정보를 사용하도록 update_plans_last_used
를 호출합니다. 만약 last_used
날짜가 즉시 업데이트되지 않는다면, 백그라운드 프로세스가 계획 테이블을 last_used
날짜로 1시간에 한 번씩(기본값) 업데이트합니다.
예를 들어, 특정 sql_hash
가 있는 명령문이 느리게 실행되기 시작하면, 성능 회귀 분석이 시작된 이후 해당 명령문에 대해 어떤 계획이 실행되었는지 확인할 수 있습니다. 이렇게 하려면 먼저 공유 메모리의 데이터를 디스크로 플러시하여 last_used
날짜가 현재 날짜이고, 그런 다음 성능 회귀가 있는 명령문의 sql_hash
의 모든 계획을 쿼리합니다. 쿼리에서 last_used
날짜가 성능 회귀 분석이 시작된 날짜보다 크거나 같은지 확인하세요. 쿼리는 성과 회귀를 담당할 수 있는 계획 또는 계획 집합을 식별합니다. apg_plan_mgmt.get_explain_plan
과 explainOptionList
를 사용하여 verbose, hashes
로 설정할 수 있습니다. 또한 apg_plan_mgmt.evolve_plan_baselines
를 통해 계획과 더 나은 성능을 발휘할 수 있는 대체 계획을 분석할 수 있습니다.
update_plans_last_used
함수는 DB 클러스터의 기본 DB 인스턴스에만 영향을 줍니다.
apg_plan_mgmt.validate_plans
최적화 프로그램에서 계획을 여전히 다시 생성할 수 있는지 검증합니다. 최적화 프로그램은 계획의 활성 또는 비활성 여부와 상관없이 Approved
, Unapproved
및 Preferred
계획을 검증합니다. Rejected
계획은 검증되지 않습니다. 원할 경우 apg_plan_mgmt.validate_plans
함수를 사용하여 유효하지 않은 계획을 삭제하거나 비활성화할 수 있습니다.
구문
apg_plan_mgmt.validate_plans(
sql_hash,
plan_hash,
action)
apg_plan_mgmt.validate_plans(
action)
반환 값
잘못된 계획 수.
Parameters
파라미터 | 설명 |
---|---|
sql_hash |
계획의 관리형 SQL 문의 sql_hash ID. |
plan_hash |
관리형 계획의 plan_hash ID. 동일한 sql_hash ID 값에 대한 모든 계획의 평균을 구하려면 NULL을 사용합니다. |
action |
함수에서 잘못된 계획에 대해 수행할 작업. 유효한 문자열 값에는 다음이 포함됩니다. 대/소문자를 구분하지 않습니다.
그 밖의 값은 빈 문자열로 간주됩니다. |
사용 노트
전체 validate_plans(action)
보기의 모든 관리형 설명문에 대해 모든 관리형 계획을 검증하려면 apg_plan_mgmt.dba_plans
형태를 사용합니다.
validate_plans(sql_hash, plan_hash, action)
가 지정된 관리형 설명문의 경우 plan_hash
가 지정된 관리형 계획을 검증하려면 sql_hash
형태를 사용합니다.
validate_plans(sql_hash, NULL, action)
가 지정된 관리형 설명문에 대해 모든 관리형 계획을 검증하려면 sql_hash
형태를 사용합니다.