메뉴 건너뛰기

Korea Oracle User Group

Admin

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;

/

 

번호 제목 글쓴이 날짜 조회 수
» SQL Plan Management(SPM) - 3 Manual Plan Capture 명품관 2020.06.01 39
20 SQL Plan Management(SPM) - 2 DBMS_SPM.CONFIG로 필터링 file 명품관 2020.03.26 51
19 SQL Plan Management(SPM) - 1 파라미터의 기능 확인 명품관 2020.03.19 74
18 [12cR2 이상] 오브젝트 이름 30자이상 사용 가능 우뽕 2020.01.22 33
17 Alert log 에서 갑자기 패치 정보가 나타나는 현상 Talros 2019.09.23 352
16 External Table 기능을 사용해 파일 읽기 명품관 2017.04.05 675
15 DBMS_SCHEDULER을 통해 OS 레벨(EXTERNAL)의 shell 수행하기 명품관 2017.04.05 669
14 오라클 패치 정보를 조회할 수 있는 뷰 DBA_REGISTRY_SQLPATCH 명품관 2017.03.02 2153
13 Schema Password 복사 하기 Talros 2016.10.05 646
12 Block Cleanout(블럭 클린아웃) 명품관 2016.09.23 880
11 Fixed Table에 대한 권한은 직접적으로 부여되지 않는다. 명품관 2016.08.26 956
10 Oracle Archive log 사용량 확인(GV$ARCHIVED_LOG) [1] 에밀리오 2016.08.04 6424
9 Oracle Resource Limit를 이용한 간단한 Parameter Check (GV$RESOURCE_LIMIT) 에밀리오 2016.07.15 1211
8 Oracle VMSTAT을 이용한 CPU 사용량 활용법 에밀리오 2016.07.14 510
7 Kill Session Script (GV$SESSION) 에밀리오 2016.07.12 1390
6 Active Session History를 이용한 TOP SQL 분석 (GV$ACTIVE_SESSION_HISTORY) 에밀리오 2016.07.12 725
5 DB에 생성된 ROLE의 생성 정보 확인 [2] 명품관 2016.05.31 440
4 내가 돌린 SQL ID 찾기 [1] Talros 2016.05.12 1556
3 테이블 컬럼의 Default 값에 대한 흔적은 Dictionary에 계속 남게 된다. 명품관 2016.04.05 576
2 Alert Log를 SQL 사용하여 보기 (X$DBGALERTEXT) [1] 에밀리오 2016.01.28 979
위로