SQL Plan Management(SPM) - 3 Manual Plan Capture
Manual Plan Capture 방법에는 아래 가지의 방법이 있다.
AWR
STS(SQL Tuning Set)
Shared SQL Area
staging table
stored outline
단건 SQL
위 방법을 통해 초기 SQL Plan Baseline에 다량의 Plan을 로딩할 수 있다.
이는 초기 Baseline 구성이나 QA에서 테스트 완료하여 보장된 성능으로 Application을 디플로이하기 위해 사용할만 하다
Cloud Control 이나 PL/SQL(DBMS_SPM) 패키지를 사용하여 Plan을 로딩할 수 있다.
이글에서는 Cloud Control을 테스트할 수 없어 DBMS_SPM 패키지를 사용해 로딩하는 방법을 테스트 하도록 하겠다.
--AWR을 이용한 Plan Capture
DBMS_SPM.LOAD_PLANS_FROM_AWR
begin_snap IN NUMBER,
end_snap IN NUMBER,
basic_filter IN VARCHAR2 := NULL,
fixed IN VARCHAR2 := 'NO',
enabled IN VARCHAR2 := 'YES',
commit_rows IN NUMBER := 1000)
RETURN PLS_INTEGER;
Table 156-18 LOAD_PLANS_FROM_AWR Function Parameters
begin_snap : Begin snapshot
end_snap : End snapshot
basic_filter : AWR에서 로딩할 SQL을 필터링 할 조건. NULL일 경우 AWR에 저장된 모든 Plan을 대상으로 함
SQLSET_ROW Object Type에 등록된 요소를 기준으로 Filter 조건을 구성할 수 있다.
아래는 오라클에 구성된 sqlset_row object의 구조이다.
CREATE TYPE sqlset_row AS object (
sql_id VARCHAR(13),
force_matching_signature NUMBER,
sql_text CLOB,
object_list sql_objects,
bind_data RAW(2000),
parsing_schema_name VARCHAR2(30),
module VARCHAR2(48),
action VARCHAR2(32),
elapsed_time NUMBER,
cpu_time NUMBER,
buffer_gets NUMBER,
disk_reads NUMBER,
direct_writes NUMBER,
rows_processed NUMBER,
fetches NUMBER,
executions NUMBER,
end_of_fetch_count NUMBER,
optimizer_cost NUMBER,
optimizer_env RAW(2000),
priority NUMBER,
command_type NUMBER,
first_load_time VARCHAR2(19),
stat_period NUMBER,
active_stat_period NUMBER,
other CLOB,
plan_hash_value NUMBER,
sql_plan sql_plan_table_type,
bind_list sql_binds,
con_dbid NUMBER,
last_exec_start_time VARCHAR2(19))
fixed : 기본값은 'NO' 이다. 이는 현재 Fixed로 구성된 Plan에 대해서는 변경하지 않는다.
enabled : 기본값은 'YES' 이다. 로딩된 Plan을 optimizer가 참조한다.
commit_rows : 커밋당 로드될 Plan 수 지정
SET SERVEROUTPUT ON
DECLARE
LOAD_RSLT PLS_INTEGER;
BEGIN
LOAD_RSLT := DBMS_SPM.LOAD_PLANS_FROM_AWR(begin_snap => 402
, end_snap => 473
, basic_filter => 'paring_schema_name = ''HR'''
, fixed =>
, enabled =>
, commit_rows => );
DBMS_OUTPUT.PUT_LINE('Load Plan Count : ' || TO_CHAR(LOAD_RSLT));
END;
/