Bind Peeking 한계에따른 Adaptive Cursor Sharing 등장 엑셈컨설팅본부 /DB 컨설팅팀김철환 Bind Peeking 의한계 SQL 이최초실행되면 3 단계의과정을거치게되는데 Parsing 단계를거쳐 Execute 하고 Fetch 의과정을통해데이터

Similar documents
Result Cache 동작원리및활용방안 엑셈컨설팅본부 /DB 컨설팅팀김철환 개요 ORACLE DBMS 를사용하는시스템에서 QUERY 성능은무엇보다중요한요소중하나이며그 성능과직접적인관련이있는것이 I/O 이다. 많은건수를 ACCESS 해야만원하는결과값을얻을수있는 QUER

WINDOW FUNCTION 의이해와활용방법 엑셈컨설팅본부 / DB 컨설팅팀정동기 개요 Window Function 이란행과행간의관계를쉽게정의할수있도록만든함수이다. 윈도우함수를활용하면복잡한 SQL 들을하나의 SQL 문장으로변경할수있으며반복적으로 ACCESS 하는비효율역

歯sql_tuning2

그리고.. 엑셀에하나둘완료된쿼리가늘어날때마다... 희열을느낀다... 이글을보는당신은어떻게할것인가? A 군의판단이잘못된것인가? 잘못된판단이아니다최선의판단이다... 11g 전까지는... 11g New Feature 인 Pending Statistics 를 SPA 와함께사용

Commit_Wait / Commit_Logging 두파라미터를통해 Log File Sync 대기시간을감소시킬수있다는것은놀라움과의아함을동시에느낄수있다. 단지파라미터의수정을통해당연히대기해야하는시간을감축한다는것은분명성능을개선해야하는입장에서는놀라운일이될것이다. 반면, 그에따

SQL PLAN MANAGEMENT 활용 엑셈컨설팅본부 /DB 컨설팅팀장정민 개요 오라클은비롯한많은관계형 DBMS 에서는사용자의 SQL 질의를효율적으로처리하기위해옵티마이저를사용하고있다. 옵티마이저는유저가수행하는 SQL 을받아실행계획을생성하고, 실제 SQL 은이실행계획을

배치프로그램에서튜닝대상 SQL 추출하기 엑셈컨설팅본부 /DB 컨설팅팀박성호 배치프로그램의성능문제를진단하기위해트레이스를사용할수없고, 개별 SQL 에대한성 능점검은비효율적인경우에어떻게배치프로그램의성능문제를제대로파악하고개선안을도 출할것인가? 복잡한로직을가지고있는프로그램 (

기술노트 49 회 SQL PLAN MANAGEMENT Author 윤병길과장 Creation Date Last Updated Version 1.0 Copyright(C) 2009 Goodus Inc. All Rights Reserved

Microsoft Word - [Unioneinc] 특정컬럼의 통계정보 갱신_ _ldh.doc

NLJ BATCH 과부분범위처리 엑셈컨설팅본부 / DB 컨설팅팀오수영 개요 오라클은새로운버전이출시될때마다한층업그레이드된기능들이추가된다. 이기능들은사용자에게편리함을제공함은물론이고, 기존의기능들이성능적으로업그레이드되어보다강력해지기도한다. 그러나때로는새롭게추가된기능으로인해,

13주-14주proc.PDF

데이터베이스-4부0816

2002 Game White paper 2002 Game White paper

untitled

ORACLE EXADATA HCC 압축방식이해하기 엑셈컨설팅본부 /DB 컨설팅팀김철환 개요 시간이지나면서데이터는급속하게증가하고있다. 데이터가증가함에따라 DBMS 에서관리되어지는정보도급속하게증가하고있다. 이로인해저장공간의부족으로하드웨어비용의증가와데이터처리성능에많은문제점들

SQL Server 에서 SQL 튜닝시알아야할힌트와사용 방법 엑셈컨설팅본부 /DB 컨설팅팀박성호 Optimizer 가 SQL 을해석할때항상최적의실행계획을생성하지는못한다. 복잡한 SQL 일수록최적의실행계획을생성하기위해고려해야할대상 (Table, Index 가많은경우 )

목차 BUG 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG ROLLUP/CUBE 절을포함하는질의는 SUBQUE

Jerry Held


Index

ALTIBASE HDB Patch Notes

SQL Tuning Business Development DB

음악부속물

음악부속물

음악부속물

ePapyrus PDF Document

10.ppt

다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL

Microsoft Word - SQL튜닝_실습교재_.doc

*캐릭부속물

PART

Part Part

£01¦4Àå-2

½ºÅ丮ÅÚ¸µ3_³»Áö

272*406OSAKAÃÖÁ¾-¼öÁ¤b64ٽÚ

만화부속물

만화부속물

KEEP BUFFER 활용방안 엑셈컨설팅본부 /DB 컨설팅팀장정민 개요 Oracle 은유저가요청한작업을빠르게처리하기위해 Buffer Cache 라는것을사용한다. Buffer Cache 는 SGA 에위치하고있으며, 오라클인스턴스에접속하는모든프로세스에의해공유된다. 이 Bu

(Microsoft PowerPoint - 5\300\345.\271\256 \303\263\270\256\(8\301\266\).ppt)

Tablespace On-Offline 테이블스페이스 온라인/오프라인

목차 BUG offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate

第 1 節 組 織 11 第 1 章 檢 察 의 組 織 人 事 制 度 등 第 1 項 大 檢 察 廳 第 1 節 組 대검찰청은 대법원에 대응하여 수도인 서울에 위치 한다(검찰청법 제2조,제3조,대검찰청의 위치와 각급 검찰청의명칭및위치에관한규정 제2조). 대검찰청에 검찰총장,대

DB 성능고도화핵심원리 비투엔컨설팅 수석컨설턴트 조시형

목 차

대량의 DML 작업에대한성능개선방안 엑셈컨설팅본부 /DB 컨설팅팀박준연 개요 대량의데이터를변경해야하는작업은그자체만으로도큰부담으로다가온다. 하지만변경작업자체에만국한되는것이아니라변경되기전데이터와변경이후데이터를각각저장관리해야하는메커니즘이라면성능을개선해야하는입장에서는더욱큰부담

Microsoft PowerPoint - Oracle Data Access Pattern.ppt

BOK°æÁ¦¸®ºä-2-2È£

강의 개요

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

Observational Determinism for Concurrent Program Security

chap 5: Trees

*2009데이터_3부

PowerPoint Presentation

MySQL-Ch10

윈도우시스템프로그래밍

결과보고서

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r

Application 에서 Parameter 값을받아 JDBC Interface 로보내게되면적절한 JDBC Driver 를통해 SQL 을 Database 로보내주게되고결과를받아서사용자에게보여주게된다. 2-2 JDBC Interface JDBC 의핵심 Interface

제목을 입력하세요.

MS-SQL SERVER 대비 기능

한지붕두가족 MS SQL Server 2012 Identity 와 Sequence 엑셈컨설팅본부 /SQL Server 팀이제춘 1992 년 MS 가 Windows NT 에서운용되는첫번째 SQL Server(4.2) 를 2 출시한이후 20 년이흘렀다. 그간꾸준한발전을통해

소만사 소개

InsertColumnNonNullableError(#colName) 에해당하는메시지출력 존재하지않는컬럼에값을삽입하려고할경우, InsertColumnExistenceError(#colName) 에해당하는메시지출력 실행결과가 primary key 제약에위배된다면, Ins

TITLE

슬라이드 제목 없음

슬라이드 1

게임백서-상하-색인 목차

게임백서-상하-색인 목차

게임백서-상하-색인 목차

11g - Serial direct read 동작원리 엑셈컨설팅본부 /DB 컨설팅팀임경석 개요 오라클 11g 에서처음소개된 Serial direct read 는대량의데이터를처리하는엑사데이타에서매우중요한기능이다. 스마트스캔을하기위해서는반드시테이블 full scan 과 d

윈도우시스템프로그래밍

DBMS & SQL Server Installation Database Laboratory

연결된서버는일반적으로분산쿼리를처리하는데사용된다. 여기서분선쿼리란다른여러데이터원본의데이터를액세스하는것을의미하며이러한데이 터원본은동일컴퓨터나다른컴퓨터에저장될수있다. 클라이언트응용프로그램이연결된서버를통해분산쿼리를실행할때 SQL Server 는명령을 구문분석하고 OLE DB

단답형 (26 회기출문제 ) 1. 아래와같은테이블이있을때아래의 SQL 결과에대해서 Oracle, SQL Server 순서로적으시오 TAB1 COL1 CHAR(10) COL2 CHAR(10) INSERT INTO TAB1 VALUES ('1',''); INSERT INT

세미나(장애와복구-수강생용).ppt

SKINFOSEC-CHR-028-ASP Mssql Cookie Sql Injection Tool 분석 보고서.doc

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - 10Àå.ppt

90

Oracle Database 10g: Self-Managing Database DB TSC

Gray level 변환 및 Arithmetic 연산을 사용한 영상 개선

MySQL-.. 1

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

2015 경제ㆍ재정수첩

Contents Data Mart 1. 개요 실습방향 테스트위한사전설정 본격실습시작 ) 데이터파일 dd 명령어로 백업수행및유실시키기 ) 장애복구수행 결론...7 페이지 2 / 7

untitled


3 S Q L A n t i p a t t e r n s Trees/intro/parent.sql CREATE TABLE Comments ( comment_id SERIAL PRIMARY KEY, parent_id BIGINT UNSIGNED, comment TEXT

슬라이드 1

Data Sync Manager(DSM) Example Guide Data Sync Manager (DSM) Example Guide DSM Copyright 2003 Ari System, Inc. All Rights reserved. Data Sync Manager

1. 들어가며 많은기업들이정보시스템의근간으로데이터베이스를사용하고있고또많은사람들이데이터베이스의성능에대해불만을토로한다. 데이터베이스의성능문제와관련해많은원인과해결책이있지만이문제와관련해자주언급되는개념이있다. Hard Parsing 이그것이다. Hard Parsing 은성능에좋


ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE (Online Upgrade) ORANGE CONFIGURATION ADMIN O

untitled

Oracle Wait Interface Seminar

PowerPoint Presentation

부서: 기획감사실 정책: 군정기획 역량 강화 단위: 군정종합기획 평가 -노 력 상 100,000원 * 1명 100 -채택제안 부상금 50,000원 * 10명 500 -기 념 품 10,000원 * 60명 포상금 1, , 포상금 1,80

ALTIBASE HDB Patch Notes

歯3-한국.PDF

PowerPoint Template

Transcription:

Bind Peeking 한계에따른 Adaptive Cursor Sharing 등장 엑셈컨설팅본부 /DB 컨설팅팀김철환 Bind Peeking 의한계 SQL 이최초실행되면 3 단계의과정을거치게되는데 Parsing 단계를거쳐 Execute 하고 Fetch 의과정을통해데이터를사용자에게전송하게되며 Parsing 단계에서실행계획이생성된다. Bind 변수를사용하는 SQL 에서실행계획이생성될때실제로사용되는변수값을모르기때문에성능에문제를발생시킬수있는실행계획이세워질수있다. 이런 Bind 변수의단점을보완하기위해 10g 에서 Bind Peeking 이라는기능이소개되었는데 Bind 변수를사용하는 SQL 에서최초실행되는시점의실제 Bind 값이무엇이냐에따라실행계획이결정되는것을말한다. 이렇게되면실제사용되는 Bind 변수의값을이용해실행계획을세울수있어보다성능에유리한실행계획을세울수있을것이라생각되지만 Bind Peeking 또한한계를가지고있다. 최초에 Bind 변수값에따라서실행계획이고정되기때문에최초값이 SQL 의성능을결정하게되어 Table Full Scan 으로실행계획이생성되었다면이 SQL 은새로운실행계획이생성되기전까지 Table Full Scan 이발생하게된다. 이러한문제로이기능은전혀사용하지못하는기능이되어버렸다. 결국 Bind 변수의단점을보완하기위해 Bind Peeking 이라는기능이소개되었지만여전히이기능도한계를가지고있다. 진화된 Cursor Sharing 필요 이러한 Bind Peeking 기능의한계를보완하기위해서 Oracle 11g 에서는 Adaptive Cursor Sharing ( 적응적커서공유 ) 이라는기능이소개되었는데 Adaptive Cursor Sharing 뜻은상황에맞게유연하게 Cursor Share 하겠다는의미이다. 기능을사용하게되면여러개의실행계 124 2013 기술백서 White Paper

획을관리할수있는데최초입력된값에의해실행계획이결정되더라고이후에새로운 Bind 변수값이사용되면이에맞게적절한실행계획을선택하여 SQL 을실행하게된다. 즉 Bind Peeking 의한계를보완한것이다. Cursor Sharing 동작원리 이기능이동작하려면기본적으로조건 Column 에히스토그램이생성되어있어야한다. 그상태에서 Bind 변수가포함된쿼리를실행하였을때, 옵티마이저가히스토그램분포도에따라실행계획이크게달라질것이라판단한다면, 해당커서를 Bind Sensitive 커서라는상태로두게된다. 이러한 Bind Sensitive 커서에해당하는구문이재차실행되었을때에, 특정변수값에서성능이크게저하되었다고판단되면해당커서를 Bind Aware 커서상태로바꾼다. 이상태가되면, 종전의성능저하된다판단된커서에대해서는기존의실행계획을사용하지않고, child 커서를생성하고새로운실행계획을생성하여저장하게되고새로운실행계획을생성해낸뒤에는선택도가비슷한것으로판단되는 Cursor 는같은실행계획을사용하게된다. Adaptive Cursor Sharing 설정방법 Adaptive Cursor Sharing 기능을설정하는방법을알아보자. Parameter 을이용한 Adaptive Cursor Sharing 설정 Adaptive Cursor Sharing 기능을사용할지의여부를지정하며기본값은 True 이다. Alter [ System Session ] Set "_optimizer_adaptive_cursor_sharing" = TRUE; 통계정보수집을하여 Histogram 을사용할수있어야함. Adaptive Cursor Sharing 기능을사용하기위해서는입력되는변수들의분포도를알아야하 는데그정보는 Histogram 을통해알수있다. Part 1 ORACLE 125

EXEC DBMS_STATS.GATHER_TABLE_STATS(USER, TABLE, ESTIMATE_PERCENT=>100, METHOD_OPT=>'FOR COLUMNS SIZE '); Adaptive Cursor Sharing 고려사항 Adaptive Cursor Sharing 을사용하지않을경우에는쿼리가실행될때마다캐시에저장된실행계획을실행하게되지만 Adaptive Cursor Sharing 을사용하게되면 Bind 변수의값이변경되었을때실행계획을재작성해야하는지의여부를판단하게된다. 이기능을모든 SQL 이사용하게된다면시스템에많은과부하가발생하게된다. 따라서모든 SQL 에대해서이기능을사용하기보다는 Parameter 을 False 적용한후에이기능이꼭필요한 SQL 에서세션단위로 Parameter 을 True 로변경하여사용하는것이좋다. Adaptive Cursor Sharing 활용방안 조회하는 SQL 에서조회조건의 Column 의중복값의분포가고르지못하여실행계획을분리해야하는경우가있는데같은 SQL 에서입력값에따라 Index Scan 이나 Full Table Scan 을배타적으로실행해야성능에유리한경우가있다. 이러한경우 Adaptive Cursor Sharing 기능을사용하게되면입력값에따라최적에실행계획을생성하여 SQL 의성능을향상시킬수있다. 테스트데이터생성 ACCT_NO 값이각각 10 만건과 10 건으로데이터를생성해보았다. CREATE TABLE TB_DPS_TRSC_BASE AS SELECT 1 ACCT_NO, 'BANK' CUST_NO, ROUND(DBMS_RANDOM.VALUE(10,100)) AMT FROM DUAL CONNECT BY LEVEL <= 100000; INSERT INTO TB_DPS_TRSC_BASE SELECT 99,'NAME',ROUND(DBMS_RANDOM.VALUE(10,100) FROM ALL_OBJECTS WHERE ROWNUM <= 10; COMMIT; 인덱스생성 CREATE INDEX TB_DPS_TRSC_BASE_1IX ON TB_DPS_TRSC_BASE (ACCT_NO) ; Parameter 설정 126 2013 기술백서 White Paper

Alter Session Set "_optimizer_adaptive_cursor_sharing" = TRUE ; 통계정보를생성하지않고 10 만건의경우와 10 건의경우를테스트 SELECT TABLE_NAME,COLUMN_NAME,HISTOGRAM FROM DBA_TAB_COLS WHERE TABLE_NAME='TB_DPS_TRSC_BASE'; TABLE_NAME COLUMN_NAME HISTOGRAM ------------------------- ------------------------- --------------- TB_DPS_TRSC_BASE ACCT_NO NONE TB_DPS_TRSC_BASE CUST_NO NONE TB_DPS_TRSC_BASE AMT NONE -- 테스트를위해 Shared pool 을 Flush 한다. ALTER SYSTEM FLUSH SHARED_POOL; EXEC :A1 := 99; 0 SELECT STATEMENT 1 10 00:00:00.01 3 1 TABLE ACCESS BY INDEX ROWID TB_DPS_TRSC_BASE 1 33467 10 00:00:00.01 3 * 2 INDEX RANGE SCAN IND_01 1 33467 10 00:00:00.01 2 -- SQL 의실행계획이변경될수없어 "N" 값으로표시됨. 0 1 3 N N EXEC :A1 := 1; Part 1 ORACLE 127

0 SELECT STATEMENT 1 100K 00:00:00.01 34454 1 TABLE ACCESS BY INDEX ROWID TB_DPS_TRSC_BASE 1 33467 100K 00:00:00.01 34454 * 2 INDEX RANGE SCAN IND_01 1 33467 100K 00:00:00.01 32 0 1 34454 N N EXEC :A1 := 1; 0 SELECT STATEMENT 1 100K 00:00:00.01 34454 1 TABLE ACCESS BY INDEX ROWID TB_DPS_TRSC_BASE 1 33467 100K 00:00:00.01 34454 * 2 INDEX RANGE SCAN IND_01 1 33467 100K 00:00:00.01 32 0 1 34454 N N 통계정보가존재하지않기때문에 Adaptive Cursor Sharing 기능을사용할수없어동일한실행계획이수립되어실행된다.(Index Rang Scan ) 통계정보생성하여 10 만건의경우와 10 건의경우를테스트 EXEC DBMS_STATS.GATHER_TABLE_STATS('SYSTEM','TB_DPS_TRSC_BASE', ESTIMATE_PERCENT=>100, METHOD_OPT=>'FOR COLUMNS SIZE 2 ACCT_NO'); SELECT TABLE_NAME,COLUMN_NAME,HISTOGRAM FROM DBA_TAB_COLS WHERE TABLE_NAME='TB_DPS_TRSC_BASE'; 128 2013 기술백서 White Paper

TABLE_NAME COLUMN_NAME HISTOGRAM ------------------------- ------------------------- --------------- TB_DPS_TRSC_BASE ACCT_NO HEIGHT BALANCED TB_DPS_TRSC_BASE CUST_NO NONE TB_DPS_TRSC_BASE AMT NONE ALTER SYSTEM FLUSH SHARED_POOL; EXEC :A1 := 99; 0 SELECT STATEMENT 1 10 00:00:00.01 3 1 TABLE ACCESS BY INDEX ROWID TB_DPS_TRSC_BASE 1 33467 10 00:00:00.01 3 * 2 INDEX RANGE SCAN IND_01 1 33467 10 00:00:00.01 2 -- SQL 의실행계획이변경될수있다면 IS_BIND_SENSITIVE 값이 "Y" 로나타난다.(Bind 변수값이 있으면 "Y" 로표시됨.) 0 1 3 Y N EXEC :A1 := 1; 0 SELECT STATEMENT 1 100K 00:00:00.01 34454 1 TABLE ACCESS BY INDEX ROWID TB_DPS_TRSC_BASE 1 33467 100K 00:00:00.01 34454 * 2 INDEX RANGE SCAN IND_01 1 33467 100K 00:00:00.01 32 Part 1 ORACLE 129

0 1 34454 Y N EXEC :A1 := 1; ------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------ 0 SELECT STATEMENT 1 100K 00:00:00.06 6887 * 1 TABLE ACCESS FULL TB_DPS_TRSC_BASE 1 33467 100K 00:00:00.06 6887 ------------------------------------------------------------------------------------------------ --Bind 변수값에따라실행계획이변경되어야하는지결정하고실행계획이변경되어야한다면 IS_BIND_AWARE 값이 "Y" 로표시됨. 0 2 34454 Y N 1 1 6687 Y Y EXEC :A1 := 99; 0 SELECT STATEMENT 1 10 00:00:00.01 3 1 TABLE ACCESS BY INDEX ROWID TB_DPS_TRSC_BASE 1 33467 10 00:00:00.01 3 * 2 INDEX RANGE SCAN IND_01 1 33467 10 00:00:00.01 2 CHILD_NUMBER EXECUTIONS BUFFER_GETS IS_B_SENS IS_B_AWAR IS_SHAR ------------ ---------- ----------- --------- --------- ---------- 0 2 3454 Y N N 1 1 6687 Y Y Y 130 2013 기술백서 White Paper

2 2 32 Y Y Y 결론 Bind 변수를사용하는 SQL 에서처음사용되는변수값으로실행계획을세우게되어그실행계획이 SQL 의성능에문제를발생시킬수있어 Bind Peeking 기능은사용하지못하는기능이되어버렸다. 하지만이기능의개선으로 Adaptive Cursor Sharing 기능을사용하게되면이문제를해결할수있다. 하지만그기능의장점과단점을잘알고사용해야만시스템을안정적으로사용할수있을것이다. 또한운영하고있는시스템을 Adaptive Cursor Sharing 기능을사용할수있는부분이있을것이다. 이기능을활용해서 SQL 의성능을개선시킨다면더욱안정화되고최적화된시스템으로발전하게될것이다. Part 1 ORACLE 131