메뉴 건너뛰기

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;

/

 

위로