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;
/
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
14 | Schema Password 복사 하기 | Talros | 2016.10.05 | 3290 |
13 | Block Cleanout(블럭 클린아웃) | 명품관 | 2016.09.23 | 1521 |
12 | Fixed Table에 대한 권한은 직접적으로 부여되지 않는다. | 명품관 | 2016.08.26 | 2700 |
11 | Oracle Archive log 사용량 확인(GV$ARCHIVED_LOG) [1] | 에밀리오 | 2016.08.04 | 11255 |
10 | Oracle Resource Limit를 이용한 간단한 Parameter Check (GV$RESOURCE_LIMIT) | 에밀리오 | 2016.07.15 | 2263 |
9 | Oracle VMSTAT을 이용한 CPU 사용량 활용법 | 에밀리오 | 2016.07.14 | 921 |
8 | Kill Session Script (GV$SESSION) | 에밀리오 | 2016.07.12 | 2146 |
7 | Active Session History를 이용한 TOP SQL 분석 (GV$ACTIVE_SESSION_HISTORY) | 에밀리오 | 2016.07.12 | 1211 |
6 | DB에 생성된 ROLE의 생성 정보 확인 [2] | 명품관 | 2016.05.31 | 928 |
5 | 내가 돌린 SQL ID 찾기 [1] | Talros | 2016.05.12 | 8823 |
4 | 테이블 컬럼의 Default 값에 대한 흔적은 Dictionary에 계속 남게 된다. | 명품관 | 2016.04.05 | 1590 |
3 | Result Cache(oracle11g NF) [6] | ocm10gr2 | 2016.03.14 | 273 |
2 | Alert Log를 SQL 사용하여 보기 (X$DBGALERTEXT) [1] | 에밀리오 | 2016.01.28 | 2045 |
1 | Partition 추가의 계절 - Range Partition 추가시 알아 두어야할 부분 [1] | 명품관 | 2015.12.03 | 2230 |