#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천탑크리에듀(구로디지털단지역3번출구 2분거리)탑크리에듀교육센터(topcredu.co.kr)제공
SQL초보에서 Schema Objects까지 두번째 자료입니다.
2-1. 개요, 시작, 종료, 2-2. 데이터베이스 시작, 종료에 대하여 설명한 자료입니다. 참고하시어 많은 도움되시길 바랍니다.^^
#1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)탑크리에듀(구로디지털단지역3번출구 2분거리)탑크리에듀교육센터(topcredu.co.kr)제공
1-1. 오라클, 데이터베이스관련 용어, 1-2. 오라클 에디션(ORACLE EDITION), 1-3. 오라클 버전 변화 등.. 개요 및 실습데이터 설치에 관련하여 설명 한 자료입니다. 많은 도움 되시길 바랍니다.^^
오라클 커서(Cursor) 개념 및 오라클 메모리 구조_PL/SQL,오라클커서강좌,SGA, PGA, UGA, Shared Pool, Sha...탑크리에듀(구로디지털단지역3번출구 2분거리)탑크리에듀(http://www.topcredu.co.kr)에서 제공하는 오라클, SQL, PL/SQL, 힌트튜닝 강좌중 오라클 커서(Cursor) 개념 & 메모리 구조(Memory Strucre)와 관련된 PPT 강좌 입니다. CURSOR, PGA, UGA, Shared Server, Dedicate Server, DRCP, Library Cache, Shared SQL Area와 관련된 내용 참조하시기 바랍니다.
1.7 튜닝의도구 sql autorace탑크리에듀(구로디지털단지역3번출구 2분거리)SQL*Plus에서 사용자는 자동으로 Optimizer가 만드는 실행계획과 통계정보를 얻을 수 있다. 이런 경우 AUTOTRACE를 사용하며 DML문을 성공적으로 수행 시 실행계획과 통계정보가 만들어지며 DML문의 성능 튜닝을 위한 방법으로 자주 이용된다.
SET AUTOTRACE를 사용하기 위해선 실행 계획용 테이블(PLAN_TABLE)이 존재해야 하며 구문을 활성화하기 위해 SET AUTOTRACE ON, 비활성화 하기 위해 SET AUTOTRACE OFF하면 된다. 참고로 SET AUTOTRACE에서 사용할 수 있는 옵션은 다음과 같다.
(오라클힌트/SQL튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트탑크리에듀(구로디지털단지역3번출구 2분거리)SQL튜닝을 위한 도구중 하나인 "오라클의 10053 이벤트" 간단히 소개하고 오라클 함수를 만들어 간단히 테스트 후 옵티마이저의 Query Transformation, Optimization 과정(조인방법 결정, 드라이빙테이블 선정), 실행계획 생성등을 Trace 파일을 만들어 확인하는 PPT 강좌 입니다.
#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천탑크리에듀(구로디지털단지역3번출구 2분거리)탑크리에듀교육센터(topcredu.co.kr)제공
SQL초보에서 Schema Objects까지 두번째 자료입니다.
2-1. 개요, 시작, 종료, 2-2. 데이터베이스 시작, 종료에 대하여 설명한 자료입니다. 참고하시어 많은 도움되시길 바랍니다.^^
#1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)탑크리에듀(구로디지털단지역3번출구 2분거리)탑크리에듀교육센터(topcredu.co.kr)제공
1-1. 오라클, 데이터베이스관련 용어, 1-2. 오라클 에디션(ORACLE EDITION), 1-3. 오라클 버전 변화 등.. 개요 및 실습데이터 설치에 관련하여 설명 한 자료입니다. 많은 도움 되시길 바랍니다.^^
오라클 커서(Cursor) 개념 및 오라클 메모리 구조_PL/SQL,오라클커서강좌,SGA, PGA, UGA, Shared Pool, Sha...탑크리에듀(구로디지털단지역3번출구 2분거리)탑크리에듀(http://www.topcredu.co.kr)에서 제공하는 오라클, SQL, PL/SQL, 힌트튜닝 강좌중 오라클 커서(Cursor) 개념 & 메모리 구조(Memory Strucre)와 관련된 PPT 강좌 입니다. CURSOR, PGA, UGA, Shared Server, Dedicate Server, DRCP, Library Cache, Shared SQL Area와 관련된 내용 참조하시기 바랍니다.
1.7 튜닝의도구 sql autorace탑크리에듀(구로디지털단지역3번출구 2분거리)SQL*Plus에서 사용자는 자동으로 Optimizer가 만드는 실행계획과 통계정보를 얻을 수 있다. 이런 경우 AUTOTRACE를 사용하며 DML문을 성공적으로 수행 시 실행계획과 통계정보가 만들어지며 DML문의 성능 튜닝을 위한 방법으로 자주 이용된다.
SET AUTOTRACE를 사용하기 위해선 실행 계획용 테이블(PLAN_TABLE)이 존재해야 하며 구문을 활성화하기 위해 SET AUTOTRACE ON, 비활성화 하기 위해 SET AUTOTRACE OFF하면 된다. 참고로 SET AUTOTRACE에서 사용할 수 있는 옵션은 다음과 같다.
(오라클힌트/SQL튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트탑크리에듀(구로디지털단지역3번출구 2분거리)SQL튜닝을 위한 도구중 하나인 "오라클의 10053 이벤트" 간단히 소개하고 오라클 함수를 만들어 간단히 테스트 후 옵티마이저의 Query Transformation, Optimization 과정(조인방법 결정, 드라이빙테이블 선정), 실행계획 생성등을 Trace 파일을 만들어 확인하는 PPT 강좌 입니다.
Sql기초강좌2_SET AUTOTRACE_SQL교육탑크리에듀(구로디지털단지역3번출구 2분거리)SQL*Plus에서 사용자는 자동으로 Optimizer에서 실행계획과 통계정보를 얻을 수 있다. AUTOTRACE를 사용하며 DML문을 성공적으로 수행 시 만들어지며 DML문의 성능 튜닝을 위한 방법으로 자주 이용 된다.
SET AUTOTRACE를 사용하기 위해선 실행 계획용 테이블(PLAN_TABLE)이 존재해야 하며 구문을 활성화 하기 위해 SET AUTOTRACE ON, 비활성화 하기위해 SET AUTOTRACE OFF하고 하면 됩니다. 참고로 SET AUTOTRACE에서 사용 할 수 있는 옵션은 다음과 같다.
MariaDB 마이그레이션 - 네오클로바NeoClova사례로 알아보는 MariaDB 마이그레이션
현대적인 IT 환경과 애플리케이션을 만들기 위해 우리는 오늘도 고민을 거듭합니다. 최근 들어 오픈소스 DB가 많은 업무에 적용되고 검증이 되면서, 점차 무거운 상용 데이터베이스를 가벼운 오픈소스 DB로 전환하는 움직임이 대기업의 미션 크리티컬 업무까지로 확산하고 있습니다. 이는 클라우드 환경 및 마이크로 서비스 개념 확산과도 일치하는 움직임입니다.
상용 DB를 MariaDB로 이관한 사례를 통해 마이그레이션의 과정과 효과를 살펴 볼 수 있습니다.
MariaDB로 이관하는 것은 어렵다는 생각을 막연히 가지고 계셨다면 본 자료를 통해 이기종 데이터베이스를 MariaDB로 마이그레이션 하는 작업이 어렵지 않게 수행될 수 있다는 점을 실제 사례를 통해 확인하시길 바랍니다.
웨비나 동영상
https://www.youtube.com/watch?v=xRsETZ5cKz8&t=52s
3.2 실행계획 sql 연산 (concatenation)탑크리에듀(구로디지털단지역3번출구 2분거리)-- 먼저 EMP에 테이블에 생성되어 있는 인덱스 및 칼럼을 확인하자.
SQL> SELECT a.index_name, a.column_name, b.visibility
FROM user_ind_columns a, user_indexes b
WHERE a.table_name = 'EMP'
AND a.index_name = b.index_name ;
-- 인덱스가 없다면 생성, 있으면 SKIP
SQL> CREATE INDEX idx_emp_job ON EMP(job);
SQL> CREATE INDEX idx_emp_deptno ON EMP(deptno);
1.8 튜닝의도구 dbms xplan탑크리에듀(구로디지털단지역3번출구 2분거리) 오라클9i 이후 사용가능한 DBMS_XPLAN 패키지는 실행계획을 DISPLAY하고, 포맷을 주기 위해 사용된다.
DBMS_XPLAN을 사용하기 위해서는 PLAN_TABLE이 존재해야 한다.
2.1 optimizer mode를 변경하는 힌트(rule)탑크리에듀(구로디지털단지역3번출구 2분거리)규칙 기반 옵티마이저(Rule-Based Optimizer)로 동작하여 실행 계획을 세우도록 하는 힌트인데 이 경우 테이블이나 인덱스의 통계 정보가 있다고 하더라도 무시하고 사용하지 않으며 규칙에 기반한 실행 계획을 세우게 된다.
옵티마이저는 순위가 매겨진 오퍼레이션에 근거하여 실행 계획을 세우며 순위가 높은 것이 우선 적용된다.
만약 SQL 문장에서 /*+ RULE INDEX(emp idx_ename) */ 와 같이 RULE 힌트와 다른 힌트가 같이 사용된다면 RULE 힌트만 적용되므로 주의하자.
3.3 실행계획 SQL 연산 (Count,Count Stopkey/Filter)탑크리에듀(구로디지털단지역3번출구 2분거리)FILTER 연산은 데이터 추출 시 필터링이 일어나고 있음을 알려주는 SQL ROW 연산인데 WHERE 조건 절에서 인덱스를 사용하지 못할 때 발생한다. NESTED LOOP 방식으로 해석할 수 있는데 서브쿼리라면 메인쿼리 로우를 하나씩 읽을때 마다 서브쿼리를 한 번씩 실행하는 형태이다.
FILTER OPERATION은 IN, NOT IN, EXISTS, NOT EXISTS 를 사용하는 경우 발견할 수 있는 OPERATION이며 중첩 루프조인(Nedted Loop Join)과 유사하게 움직인다. 메인쿼리의 결과에 대해 서브쿼리의 결과값을 버퍼에 임시저장해 같거나 다른 것을 찾아 나가는 방식이다. 이러한 과정이 드라이빙되는 테이블의 각 로우에 대해 일어나기 때문에 NESTED LOOP JOIN과 유사하다고 볼 수있다.
엔터프라이즈 클라우드 마이그레이션 준비와 실행. 그리고, 클라우드 운영 모범 사례 공유-최지웅, 오픈소스컨설팅 CTO / 장진환, 스마일샤...Amazon Web Services Korea클라우드 마이레이션은 단순한 업무의 환경 이전 차원을 넘어 미래를 준비하는 긴 여정의 출발점이기도 합니다. 또한, 클라우드 마이그레이션의 전략,기술 준비사항은 기존의 IT 운영 환경에 비례하여 매우 다양하며 복잡 합니다. 이번 세션에서는 AWS MSP 파트너사인 오픈소스 컨설팅, 스마일 샤크의 다양한 클라우드 마이그레이션 사례 및 운영 환경 최적화 사례를 기반으로 여러분들의 클라우드 여정에 도움을 드리고자 합니다.
3.6 실행계획 SQL 연산 (NESTED LOOP SEMI-JOIN)탑크리에듀(구로디지털단지역3번출구 2분거리)WHERE절에 인덱스 구성 컬럼이 ‘<’>’와 같이 범위 제한 연산자에 의해 이용되거나 BETWEEN or LIKE와 같은 조건 절에 이용될 때 INDEX RANGE SCAN을 하게 된다. 만약 결합(복합) 인덱스라면 범위 제한자에 사용되는 컬럼은 인덱스 구성 컬럼 중 선두 컬럼이여야 한다. 조건을 만족하는 첫 번째 레코드를 인덱스 블록에서 추출 후 조건에 맞는 데이터가 나올 때 까지 계속 스캔하는 나가는 방식으로 INDEX, INDEX_ASC 힌트를 사용할 때 나타나는 연산자이다.
아래 예에서 EMP TABLE에는 sal에 대해 오름차순 순방향 인덱스가 구성되어 있다.
(Index Range Scan이 가능하도록 하는 힌트는 INDEX_RS 이다.)
1.6 cursor sharing 파라미터탑크리에듀(구로디지털단지역3번출구 2분거리)Oracle 8.1.6에서 소개된 Cursor_Sharing 변수는 각각의 문장들에 대해 bind 변수로 처리하지 않더라도 내부적으로 바인드 변수로 처리하여 각각의 Cursor에 대해 공유가 가능하도록 했다. 실제 이 기능은 Bind 변수를 쓰는 것보다는 빠르지 않지만 Literal SQL문을 이용하는 것보다 20~30% 성능 향상이 있는 것으로 검증 되었으며 오라클12C에서 사용가능한 두 파라미터는 EXACT, FORCE이다. (SIMILAR는 오라클12C에서 Deprecated됨)
Oracle11g에서 Cursor_Sharing 파라미터의 기본값은 EXACT인데 기본값이 아닌 경우 SQL문장이 리터럴 SQL 형태로 작성되었다면 시스템에서 생성한 바인드 변수(:SYS_B_0)로 리터럴 값을 자동 변형 한다.
OCI Database Management 설정 방법JC ParkOCI DBCS, Autonomous Database, Exadata Cloud Service 모니터링 서비스 설정 방법
https://docs.oracle.com/en-us/iaas/database-management/index.html
3.5 실행계획 SQL 연산 (HASH SEMI-JOIN)탑크리에듀(구로디지털단지역3번출구 2분거리)세미 조인은 보통 EXISTS를 사용하는 서브쿼리의 형태로 나타나며 이러한 경우 서브 쿼리에 인덱스가 존재하지 않는다면 상당히 비효율적인데 SEMI-JOIN이 일어나도록 유도한다면 성능의 향상을 꽤 할 수 있다. 즉 인덱스 없이 EXISTS를 사용하는 쿼리라면 HASH_SJ or MERGE_SJ or NL_SJ 힌트를 이용해서 세미조인이 일어나도록 푸는 것이 좋다.
1. Part 1 ORACLE │225
SQL PLAN MANAGEMENT 활용
㈜엑셈 컨설팅본부/DB컨설팅팀 장 정민
개요
오라클은 비롯한 많은 관계형 DBMS 에서는 사용자의 SQL 질의를 효율적으로 처리하기 위해
옵티마이저를 사용하고 있다. 옵티마이저는 유저가 수행하는 SQL 을 받아 실행계획을 생성하고,
실제 SQL 은 이 실행계획을 통해서 수행된다. 데이터 베이스 운영 시 평소 잘 수행되던 SQL 이
성능 이슈를 발생 시키는 때가 있는데, 그 원인이 SQL 실행 계획 변화에 있는 경우가 많다.
SQL 의 실행 계획이 변하는 이유는 다양한데, 통계정보의 변경이나 인덱스의 상태 변화, DB 의
파라메터나 version 변경 등에 의해 SQL 의 실행 계획이 변할 수 있다. 그런데 SQL 의 실행계획
변화를 막기 위해 이런 DB 작업을 하지 않을 수는 없다.
이러한 실행 계획의 변화로 인해 발생될지 모르는 성능저하를 예방하기 위해 Oracle 11g 부터
SPM(SQL Plan Management)라는 기능을 제공하고, 이를 이용해 SQL 외부적인 요소에 의한
영향을 최소화 할 수 있다.
SPM의 사용 목적과 특성
SPM 은 SQL 외부적인 요소의 변화에 의한 영향을 최소화 하는데 그 목적이 있다. SPM 의 주요
특성으로는 다음의 두 가지를 들 수가 있다.
1. Execution Plan 의 변경에 의한 성능저하를 사전 예방
2. Plan History 관리를 통한 SQL Plan 의 이력 관리 가능
SPM 은 SQL Plan Baseline(Plan 과 Hint)을 DB 에 저장해 놓고 검증된 실행계획만을 사용할
수 있도록 하면서, 자동으로 변경되는 SQL 의 실행계획을 관리한다. 새로운 실행 계획이 생성될
경우, 검증이 끝날 때까지 사용하지 않도록 하여 SQL 실행계획 변경으로 발생할 수 있는 성능
2. 226│2013 기술백서 White Paper
문제를 사전에 예방할 수 있다. 또 새로 생성된 실행계획은 검증 과정에서 현재의 실행계획과 비
교해 성능이 향상된 경우에만 사용할 수 있도록 하는 것이 가능하다.
SPM 사용 순서
SPM 의 사용은 다음과 같은 순서로 진행한다.
SQL_PLAN_BASELINES 관련 파라미터 변경
SQL_PLAN_BASELINES 에 실행계획 등록
DBA_SQL_PLAN_BASELINES 뷰를 통해 확인
SQL_PLAN_BASELINES 속성 변경을 통한 사용 실행계획 제어
SQL_PLAN_BASELINES 관련 파라메터 변경
관련 파라메터 조회
SQL> show parameter sql_plan_baselines
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
optimizer_capture_sql_plan_baselines boolean FALSE
optimizer_use_sql_plan_baselines boolean TRUE
optimizer_use_sql_plan_baselines : SPB 를 활성화 하는 파라메터
optimizer_capture_sql_plan_baselines : 2 회 이상 수행되는 SQL 을 SPB 에 자동 등록하도록
하는 파라메터
3. Part 1 ORACLE │227
SQL_PLAN_BASELINES에 실행계획 등록&삭제
SPB 에 실행계획을 등록하는 방법은 두 가지가 있는데 DBMS_SPM 패키지를 사용하여
수동으로 직접 등록하는 방법과, optimizer_capture_sql_plan_baselines 파라메터 설정을
통해 자동으로 실행계획을 등록시키는 방법이 있다.
SPB 수동 등록
SPB Baseline 등록 패키지 내용
DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE (
sql_id IN VARCHAR2,
plan_hash_value IN NUMBER := NULL,
fixed IN VARCHAR2 := 'NO',
enabled IN VARCHAR2 := 'YES') RETURN PLS_INTEGER;
등록하려는 SQL 정보 확인
SELECT sql_id ,
plan_hash_value ,
sql_fulltext
FROM v$sql
WHERE sql_text LIKE '%spmtest%'
SQL_ID PLAN_HASH_VALUE SQL_FULLTEXT
------------- --------------- ----------------------------------------
93zny6hkjj6s7 1690735414 SELECT * FROM spmtest WHERE lv = 10
93zny6hkjj6s7 4164974113 SELECT * FROM spmtest WHERE lv = 10
SQL_ID 와 PLAN_HASH_VALUE 이용하여 SPB 등록
DECLARE
pls pls_integer ;
BEGIN
pls := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE ( '93zny6hkjj6s7' , '1690735414') ;
dbms_output.put_line( pls || '개 등록' ) ;
END ;
/
4. 228│2013 기술백서 White Paper
SQL_ID 와 PLAN_HASH_VALUE 를 실행계획을 유일하게 식별 가능하다. 만약
PLAN_HASH_VALUE 값을 입력하지 않을 경우 SQL_ID 에 해당하는 PLAN 을 모두 SPB 에
등록한다.
optimizer_capture_sql_plan_baselines 파라메터를 true 로 설정하면 2 회 이상 수행되는
모든 SQL 의 PLAN 을 자동으로 SPB 에 등록한다.
SPB Baseline 삭제 패키지
DBMS_SPM.DROP_SQL_PLAN_BASELINE (
sql_handle IN VARCHAR2 := NULL,
plan_name IN VARCHAR2 := NULL)
RETURN PLS_INTEGER;
DECLARE
pls pls_integer ;
BEGIN
pls := DBMS_SPM.DROP_SQL_PLAN_BASELINE ( 'SYS_SQL_351516f2a705638a') ;
dbms_output.put_line( pls || '개 삭제' ) ;
END ;
/
Baseline 의 삭제는 sql_handle 과 plan_name 을 입력해서 수행한다. 만약 값을 입력하지
않으면 모든 값이 해당된다.
DBA_SQL_PLAN_BASELINES 뷰를 통해 확인
DBA_SQL_PLAN_BASELINES 뷰 조회
SQL>SELECT *
SQL>FROM dba_sql_plan_baselines
SIGNATURE SQL_HANDLE SQL_TEXT PLAN_NAME CREATOR
ORIGIN …
---------- ------------------------ ---------- ------------------------------ -------- -----
3.82498868 SYS_SQL_351516f2a705638a SELECT * SQL_PLAN_3a58qyamhaswa2b869b05 SYS
MANUAL-LOAD …
5. Part 1 ORACLE │229
DBA_SQL_PLAN_BASELINES 뷰 칼럼 내용
Column Datatype Description
SIGNATURE NUMBER SQL ID. V$SQL(AREA)뷰의
exact_mathing_signature 칼럼과 조인가능SQL_HANDLE VARCHAR2(30) BASLINE ID
SQL_TEXT CLOB SQL text
PLAN_NAME VARCHAR2(30) Plan ID
CREATOR VARCHAR2(30) BASELINE 생성유저
ORIGIN VARCHAR2(14) BASELINE 생성경로
DESCRIPTION VARCHAR2(500) BASELINE 설명
VERSION VARCHAR2(64) BASELINE 생성시 DB 버젼
CREATED TIMESTAMP(6) BASELINE 생성 시간
LAST_MODIFIED TIMESTAMP(6) BASELINE 마지막 수정 시간
LAST_EXECUTED TIMESTAMP(6) BASELINE 마지막 실행 시간
LAST_VERIFIED TIMESTAMP(6) BASELINE 마지막 검증 시간
ENABLED VARCHAR2(3) Optimizer 에 의해 사용될 수 있는지를 나타내는 속성
ACCEPTED VARCHAR2(3) ACCEPTED 속성
FIXED VARCHAR2(3) FIXED 속성
AUTOPURGE VARCHAR2(3) 사용하지 않고 일정시간이 지날 경우 자동 purge
OPTIMIZER_COST NUMBER BASELINE 생성시 COST
MODULE VARCHAR2(48) Application 모듈명
ACTION VARCHAR2(32) Application Action
EXECUTIONS NUMBER BASELINE 생성 시점의 값
ELAPSED_TIME NUMBER BASELINE 생성 시점의 값
CPU_TIME NUMBER BASELINE 생성 시점의 값
BUFFER_GETS NUMBER BASELINE 생성 시점의 값
DISK_READS NUMBER BASELINE 생성 시점의 값
DIRECT_WRITES NUMBER BASELINE 생성 시점의 값
ROWS_PROCESSED NUMBER BASELINE 생성 시점의 값
FETCHES NUMBER BASELINE 생성 시점의 값
END_OF_FETCH_COUNT NUMBER BASELINE 생성 시점의 값
6. 230│2013 기술백서 White Paper
SQL_PLAN_BASELINES 속성 변경을 통한 사용 실행계획 제어
SPB 속성 변경 패키지 내용
DBMS_SPM.ALTER_SQL_PLAN_BASELINE (
sql_handle IN VARCHAR2 := NULL,
plan_name IN VARCHAR2 := NULL,
attribute_name IN VARCHAR2,
attribute_value IN VARCHAR2)
RETURN PLS_INTEGER;
변경 가능 속성 : enabled, fixed, autopurge, plan_name, description
Baseline 의 실행계획 사용시 우선순위를 결정하는 속성으로 ENABLED, ACCEPTED, FIXED 의
3 가지 속성이 있다.
위 세가지 속성 중에서 ENABLED 와 ACCEPTED 속성은 Baseline 이 사용 가능한지를 나타내는
속성으로 모두 ‘YES’ 상태인 Baseline 만 사용이 가능하다. ENABLED 속성은 사용자가 직접 변
경 가능하다. ACCEPTED 속성의 경우 최초 등록되는 Baseline 과 사용자가 커서 캐시에서 수동
으로 등록하는 Baseline 은 ‘YES’상태로 등록된다. 실행계획 변경이 발생하여 자동 등록되는 실
행계획의 경우 ‘NO’ 상태로 등록 된다.
FIXED 속성은 Baseline 사용시 우선 순위를 결정하는 속성으로 ENABLED 와 ACCEPTED 속성
이 모두 ‘YES’인 Baseline 중 FIXED 속성이 ‘YES’인 Baseline 이 우선적으로 선택된다. 만일 우
선순위가 같은 Baseline 이 여러 개 존재할 경우에는 Optimizer 에 의해 Cost 가 낮게 판단되는
Baseline 이 선택된다.
일단 Baseline 에 등록되어 사용 가능한 Baseline 이 존재하고, DB 파라메터가 Baseline 을 사
용하도록 설정되어 있으면 SQL 실행시 Baseline 을 통해 실행계획을 반영한다. 이후에 SQL 외
적인 요인으로 SQL 의 실행계획에 변화가 생길 경우 새로 생성되는 실행계획은 바로 SQL 수행
에 반영되지 않고, ACCEPTED 속성이 ‘NO’인 상태로 자동으로 SPB 에 저장된다. 새로 생성된
Baseline 은 검증과정을 거쳐 ACCEPTED 속성이 ‘YES’인 상태로 바뀔 때까지 Baseline 선택에
서 제외된다.
7. Part 1 ORACLE │231
SPB 검증 패키지
DBMS_SPM.EVOLVE_SQL_PLAN_BASELINE (
sql_handle IN VARCHAR2 := NULL,
plan_name IN VARCHAR2 := NULL,
time_limit IN INTEGER := DBMS_SPM.AUTO_LIMIT,
verify IN VARCHAR2 := 'YES',
commit IN VARCHAR2 := 'YES')
RETURN CLOB;
패키지를 실행하면 non accepted 상태의 Baseline 에 대해 검증 작업을 수행한다. Verify 값이
yes 일 경우 time_limit 으로 설정된 시간 이내에 실제 검증 작업을 수행한다. Commit 이 yes
일 경우 accepted 속성을 yes 로 바꾸고, no 일 경우 바뀌지 않는다. 결과 값으로 검증 작업에
대한 레포트를 생성한다.
테스트
SQL>SELECT signature ,
SQL> sql_handle ,
SQL> plan_name ,
SQL> origin ,
SQL> enabled ,
SQL> accepted ,
SQL> fixed
SQL>FROM dba_sql_plan_baselines
SIGNATURE SQL_HANDLE PLAN_NAME ORIGIN
ENABLED ACCEPTED FIXED OPTIMIZER_COST
---------- ----------------------- ------------------------ -------------- ------- ---
3.82498868 SYS_SQL_351516f2a705638a SQL_PLAN_3a58qyamhaswa2b869b05 AUTO-CAPTURE
YES NO NO 1938
3.82498868 SYS_SQL_351516f2a705638a SQL_PLAN_3a58qyamhaswaeaf1df04 AUTO-CAPTURE
YES YES NO 2
현재 아래쪽 Baseline 을 사용중 새로운 실행계획의 생성으로 위쪽 Baseline 이 생성된 상태.
(위 FULL SCAN, 아래 INDEX SCAN)
8. 232│2013 기술백서 White Paper
Accepted 가 NO 인 상태이기 때문에 Baseline 이 사용되지 않는다. YES 로 바꾸기 위한 검증작
업 실행
DECLARE
pls clob ;
BEGIN
pls := dbms_spm.evolve_sql_plan_baseline( 'SYS_SQL_351516f2a705638a' ,
'SQL_PLAN_3a58qyamhaswa2b869b05' , DBMS_SPM.AUTO_LIMIT, 'yes' , 'yes' ) ;
dbms_output.put_line( pls ) ;
END ;
/
-------------------------------------------------------------------------------
Evolve SQL Plan Baseline Report
-------------------------------------------------------------------------------
Inputs:
-------
SQL_HANDLE = SYS_SQL_351516f2a705638a
PLAN_NAME = SQL_PLAN_3a58qyamhaswa2b869b05
TIME_LIMIT = DBMS_SPM.AUTO_LIMIT
VERIFY = yes
COMMIT = yes
Plan: SQL_PLAN_3a58qyamhaswa2b869b05
------------------------------------
Plan was verified: Time used .12 seconds.
Plan failed performance criterion: 95.07 times worse than baseline plan.
Baseline Plan Test Plan Stats Ratio
------------- --------- -----------
Execution Status: COMPLETE COMPLETE
Rows Processed: 1 1
Elapsed Time(ms): .159 10.617 .01
CPU Time(ms): .111 10.553 .01
Buffer Gets: 3 7153 0
Physical Read Requests: 0 0
Physical Write Requests: 0 0
Physical Read Bytes: 0 0
Physical Write Bytes: 0 0
Executions: 1 1
9. Part 1 ORACLE │233
-------------------------------------------------------------------------------
Report Summary
-------------------------------------------------------------------------------
Number of plans verified: 1
Number of plans accepted: 0
검증작업 실행시 Commit 값을 ‘yes’로 입력했으나. 실제 검증시에 새로 생성된 SQL 이 비효율적이라
판단되서 인증되지 않았다.
새로운 Baseline 사용하려면 현재 사용되는 Baseline 보다 우선순위를 높게 만들어줘야 한다.
Accepted 값을 바꾸기 위해 실제 Verify(검증)하지 않고 강제 변경
-------------------------------------------------------------------------------
Evolve SQL Plan Baseline Report
-------------------------------------------------------------------------------
Inputs:
-------
SQL_HANDLE = SYS_SQL_351516f2a705638a
PLAN_NAME = SQL_PLAN_3a58qyamhaswa2b869b05
TIME_LIMIT = DBMS_SPM.AUTO_LIMIT
VERIFY = no
COMMIT = yes
Plan: SQL_PLAN_3a58qyamhaswa2b869b05
------------------------------------
Plan was changed to an accepted plan.
-------------------------------------------------------------------------------
Report Summary
-------------------------------------------------------------------------------
Number of plans verified: 0
Number of plans accepted: 1
Fixed 속성 변경
DECLARE
pls pls_integer ;
BEGIN
pls := DBMS_SPM.ALTER_SQL_PLAN_BASELINE ( 'SYS_SQL_351516f2a705638a' ,
'SQL_PLAN_3a58qyamhaswa2b869b05', 'fixed', 'yes') ;
dbms_output.put_line( pls || '개 변경' ) ;
END ;
/
10. 234│2013 기술백서 White Paper
SIGNATURE SQL_HANDLE PLAN_NAME ORIGIN
ENABLED ACCEPTED FIXED OPTIMIZER_COST
---------- ----------------------- ------------------------ ------------ ------- -----
3.82498868 SYS_SQL_351516f2a705638a SQL_PLAN_3a58qyamhaswa2b869b05 AUTO-CAPTURE
YES YES YES 1938
3.82498868 SYS_SQL_351516f2a705638a SQL_PLAN_3a58qyamhaswaeaf1df04 AUTO-CAPTURE
YES YES NO 2
SQL_ID SQL_TEXT SQL_PLAN_BASELINE
PLAN_HASH_VALUE
----------- ------------------------------- --------------------------- --------------
93zny6hkjj6s7 SELECT * FROM spmtest WHERE lv = 100 SQL_PLAN_3a58qyamhaswa2b869b05
1690735414
- Baseline 사용시 Fixed 된 것이 우선순위가 높기 때문에 해당 Baseline 사용.
만약 2 개 모두 Fixed 될 경우
DECLARE
pls pls_integer ;
BEGIN
pls := DBMS_SPM.ALTER_SQL_PLAN_BASELINE ( 'SYS_SQL_351516f2a705638a' ,
'SQL_PLAN_3a58qyamhaswaeaf1df04', 'fixed', 'yes') ;
dbms_output.put_line( pls || '개 등록' ) ;
END ;
/
SIGNATURE SQL_HANDLE PLAN_NAME ORIGIN
ENABLED ACCEPTED FIXED OPTIMIZER_COST
--------- ------------------------ ------------------------ ------------ ------- -----
3.82498868 SYS_SQL_351516f2a705638a SQL_PLAN_3a58qyamhaswa2b869b05 AUTO-CAPTURE
YES YES YES 1938
3.82498868 SYS_SQL_351516f2a705638a SQL_PLAN_3a58qyamhaswaeaf1df04 AUTO-CAPTURE
YES YES YES 2
SQL_ID SQL_TEXT SQL_PLAN_BASELINE
PLAN_HASH_VALUE
----------- ------------------------------- ------------------------------ -----------
93zny6hkjj6s7 SELECT * FROM spmtest WHERE lv = 100 SQL_PLAN_3a58qyamhaswaeaf1df04
1577308861
11. Part 1 ORACLE │235
- 우선순위가 같은 Baseline 이 존재할 경우 COST 가 낮은쪽의 Baseline 이 선택된다.
일단 SPB 에 어떤 SQL 에 대한 Baseline 이 존재하면 SQL 의 Text 가 동일한 SQL 에 대해서 실
행계획의 변화가 생길 때 해당 실행계획에 대한 Baseline 이 자동으로 등록된다. 다만 SPB 의
FIXED 속성이 ‘YES’인 Baseline 이 존재하고, 해당 Baseline 이 사용되고 있는 경우에는 SQL
의 실행계획에 영향을 미치는 변화가 생겨도 새로운 실행계획을 생성하지 않는다.
이상의 내용을 다음 표와 같이 정리할 수 있다.
적용여부
속성
우선 적용 적용가능 적용안됨 적용안됨
ENABLED YES YES ALL NO
ACCEPTED YES YES NO ALL
FIXED YES NO ALL ALL
새 실행계획 생성안함 SPB 등록(비검증)
결론
DB 를 운영하는데 있어서 통계정보의 변경이나 인덱스의 상태 변화, DB 의 파라메터 변경, DB
version 변경 등 SQL 의 실행계획을 변화 시킬 수 있는 요인은 많이 있다. 또 이로 인한 성능 문
제를 겪는 경우도 있을 수 있다. 그런데 이런 문제가 생길 수 있다고 해서 해당 작업들을 아예 하
지 않을 수는 없는 일이다. 이럴 때 SQL 의 실행계획 변화에 의한 문제를 막기 위해 SPM 사용을
고려 해 볼 수 있다. SPM 은 여러 개의 실행 계획을 저장해 놓고 유동적으로 사용이 가능하다.
12. 236│2013 기술백서 White Paper
SPM 에 대한 내용을 숙지하고, 적절하게 사용할 수 있다면, DB 를 운영하는데 도움이 될 수 있
을 것이다.