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

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

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

13주-14주proc.PDF

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

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

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

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

歯sql_tuning2

10.ppt

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

90

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

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

MS-SQL SERVER 대비 기능

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

MySQL-.. 1

MySQL-Ch10

Oracle Database 10g: Self-Managing Database DB TSC

Spring Boot/JDBC JdbcTemplate/CRUD 예제

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

untitled

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

最即時的Sybase ASE Server資料庫診斷工具

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

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

The Self-Managing Database : Automatic Health Monitoring and Alerting

UNIST_교원 홈페이지 관리자_Manual_V1.0

Intra_DW_Ch4.PDF

ETL_project_best_practice1.ppt

목 차

ALTIBASE HDB Patch Notes

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

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

1217 WebTrafMon II

DBMS & SQL Server Installation Database Laboratory

ePapyrus PDF Document

PowerPoint 프레젠테이션

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

결과보고서

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

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

thesis

TITLE

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

Jerry Held

SQL Tuning Business Development DB

PowerPoint 프레젠테이션

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

PRO1_09E [읽기 전용]

Spring Data JPA Many To Many 양방향 관계 예제

PHP & ASP

歯PLSQL10.PDF

Relational Model

chap01_time_complexity.key

MySQL-Ch05

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

윈도우시스템프로그래밍

FlashBackt.ppt

슬라이드 1

Orcad Capture 9.x

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

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

Slide 1

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

윈백및업그레이드 Tibero Flashback 가이드

MaxGauge( 맥스게이지 ) 를이용한 SQL 모니터링, 진단 / 분석및튜닝가이드 엑셈

데이터베이스-4부0816

2002 Game White paper 2002 Game White paper

K7VT2_QIG_v3

Microsoft PowerPoint - 1_3_DBA_SQL_tuning

untitled

Jerry Held

PowerPoint Presentation

PowerPoint 프레젠테이션

Microsoft PowerPoint Python-DB

(Humphery Kim) RAD Studio : h=p://tech.devgear.co.kr/ : h=p://blog.hjf.pe.kr/ Facebook : h=p://d.com/hjfactory :

슬라이드 1

강의 개요

Portal_9iAS.ppt [읽기 전용]

5장 SQL 언어 Part II

Oracle Apps Day_SEM

슬라이드 1


DW 개요.PDF

Chapter 1

DocsPin_Korean.pages

문서 템플릿

Microsoft PowerPoint - 10Àå.ppt

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호

PowerPoint Presentation

PowerPoint Presentation

8 장데이터베이스 8.1 기본개념 - 데이터베이스 : 데이터를조직적으로구조화한집합 (cf. 엑셀파일 ) - 테이블 : 데이터의기록형식 (cf. 엑셀시트의첫줄 ) - 필드 : 같은종류의데이터 (cf. 엑셀시트의각칸 ) - 레코드 : 데이터내용 (cf. 엑셀시트의한줄 )

PowerPoint Presentation

TECHNICAL WHITE PAPER Tibero Optimizer SQL Execution Plan October 2012

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

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

PowerPoint Template

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D D382E687770>

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

구축환경 OS : Windows 7 그외 OS 의경우교재 p26-40 참조 Windows 의다른버전은조금다르게나타날수있음 Browser : Google Chrome 다른브라우저를사용해도별차이없으나추후수업의모든과정은크롬사용 한

Transcription:

SPA(SQL Performance Analyze) 를이용한통계정보 수집 엑셈컨설팅본부 /DB 컨설팅팀오경렬 1. SPA 란? SPA(SQL Performance Analyze) 는 RAT(Real Application Testing) 서비스의옵션중에하나 이다. 본문서는 SPA 를이용해좀더안정적으로통계정보를생성하는 Process 에대해다룬다. 2. 통계정보와 SQL Tuning 튜닝은 LEADING(A) USE_NL(B) INDEX(A A(COL1)) 처럼간단한힌트로대부분해결가능하다. 이것이가능한이유는 Leading 과같은힌트로쿼리의키조건이무엇인지지정해주면나머지플랜은 Oracle Optimizer 가 Query Transformation 등최적화알고리즘을적용해최적의성능을낼수있도록플랜을작성하기때문이다. 튜너 A 가사이트에튜닝지원을간다. 사이트에도착한 A 는가지고있던스크립트로능숙하게 Tuning 대상을발췌한다. 수집기준은 Execution 이 1000 번이상이면서 Buffer Gets 이 10000 Block 이상인쿼리무려 200 개의쿼리가추출되었다... A 군은순간당황했지만빠르게안정을되찾고입고있던와이셔츠의소매단추를풀고두번접어올리고나서는차고있던시계를풀어책상위에올려놓는다. 시간은 9 시 30 분을지나고있다. " 흠.. 오늘몇개나할수있을까..." A 군은알듯말듯한미소를지어보이고는중지손가락으로안경을한번치켜올리고이내불꽃튜닝에들어간다 112 2013 기술백서 White Paper

그리고.. 엑셀에하나둘완료된쿼리가늘어날때마다... 희열을느낀다... 이글을보는당신은어떻게할것인가? A 군의판단이잘못된것인가? 잘못된판단이아니다최선의판단이다... 11g 전까지는... 11g New Feature 인 Pending Statistics 를 SPA 와함께사용한다면 A 군의 200 개의튜닝대상쿼리는 10 개내외로줄어들수도있다. 오라클 Optimizer 는생각보다똑똑하다. 3. SPA 사용가능여부확인 RAT Option 이 FALSE 면사용할수없다. SELECT * FROM V$OPTION WHERE PARAMETER = 'Real Application Testing' PARAMETER VALUE -------------------------------------- -------- Real Application Testing TRUE 4. 사용예 간단한사례를다룬다. 본인의것으로흡수하고수정해서실무에적용하길바란다. 시나리오요약 0. 테스트스키마생성및쿼리수행 1. SQL_SET 생성 2. ANALYSIS_TASK #1 생성 3. SCHEMA or TABLE Pending Statistcs 설정 4. 통계정보수집 5. Session Use Pending Statistics 설정 Part 1 ORACLE 113

6. ANALYSIS_TASK #2 생성 7. ANALYSIS_TASK #1, #2 비교 8. 리포팅 9. 비교결과조회스크립트 0. 테스트스키마생성및쿼리수행 DROP TABLE EXEM_T1 PURGE; CREATE TABLE EXEM_T1 AS SELECT LEVEL C1, 'A' C2 FROM DUAL CONNECT BY LEVEL <= 100000; INSERT INTO EXEM_T1 VALUES(1, 'B'); CREATE INDEX I1_EXEM_T1 ON EXEM_T1(C2) TABLESPACE TSD_QM; EXEC DBMS_STATS.GATHER_TABLE_STATS(OWNNAME =>'MAXGAUGE', TABNAME =>'EXEM_T1', NO_INVALIDATE =>FALSE, METHOD_OPT =>'FOR ALL COLUMNS SIZE 3', ESTIMATE_PERCENT =>10); -- SQL 수행 (A, B 두가지가있고분포가좋지않음 -> FTS) SELECT COUNT(C1) FROM EXEM_T1 WHERE C2 = :B1; --COUNT(C1) --100000 1. SQL_SET 생성 SELECT ID, 114 2013 기술백서 White Paper

NAME, OWNER, DESCRIPTION, CREATED, LAST_MODIFIED, STATEMENT_COUNT FROM DBA_SQLSET where name = 'OKR_TEST'; --ID NAME OWNER DESCRIPTION CREATED LAST_MODIFIED STATEMENT_COUNT --24 OKR_TEST MAXGAUGE 2013-06-27 오후 1:37:31 2013-06-27 오후 1:37:43 4 -- SQLSET 과 ANALYSIS_TASK 연결고리확인 SELECT DESCRIPTION FROM DBA_SQLSET_REFERENCES WHERE SQLSET_NAME = 'OKR_TEST'; --DESCRIPTION --created by: SQL Performance Analyzer - task: OKR_SPA SELECT TASK_NAME, EXECUTION_NAME, EXECUTION_TYPE, STATUS, EXECUTION_END FROM USER_ADVISOR_EXECUTIONS WHERE TASK_NAME = 'OKR_SPA'; --TASK_NAME EXECUTION_NAME EXECUTION_TYPE STATUS EXECUTION_END --OKR_SPA OKR_AFTER TEST EXECUTE COMPLETED 2013-06-27 오후 1:48:07 --OKR_SPA OKR_BEFORE TEST EXECUTE COMPLETED 2013-06-27 오후 1:42:52 --OKR_SPA OKR_COMP COMPARE PERFORMANCE COMPLETED 2013-06-27 오후 1:48:34 -- TASK 가존재할경우 SET 삭제전에 TASK 먼저삭제해야그다음 SET 삭제가가능하다. -- ANALYSIS_TASK DROP EXEC DBMS_SQLPA.DROP_ANALYSIS_TASK('OKR_SPA'); -- TUNING SET DROP EXEC DBMS_SQLTUNE.DROP_SQLSET('OKR_TEST'); Part 1 ORACLE 115

2. ANALYSIS_TASK #1 생성 ANALYSIS_TASK 는 4 가지방법으로생성가능하다. (1) Sql text format EXEC :stmt_task := DBMS_SQLPA.CREATE_ANALYSIS_TASK( sql_text => 'select quantity_sold from sales s, times t where s.time_id = t.time_id and s.time_id = TO_DATE(''24-NOV-00'')'); (2) Sql id format (cursor cache) EXEC :stmt_task := DBMS_SQLPA.CREATE_ANALYSIS_TASK(sql_id => 'ay1m3ssvtrh24'); (3) Workload repository format exec :stmt_task := DBMS_SQLPA.CREATE_ANALYSIS_TASK( begin_snap => 1, end_snap => 2, sql_id => 'ay1m3ssvtrh24'); (4) Sql tuning set format (first we need to load an STS, then analyze it) EXEC :sts_task := DBMS_SQLPA.CREATE_ANALYSIS_TASK( --- sqlset_name => 'my_workload', --- order_by => 'BUFFER_GETS', --- description => 'process workload ordered by buffer gets'); -- 아래는 Sql tuning set format 사용한예제이다. --SQLSET 생성 EXEC DBMS_SQLTUNE.CREATE_SQLSET('OKR_TEST'); --내용을채워넣는다 --COMMAND TYPE --2 --> insert --3 --> select (for update) --6 --> update 116 2013 기술백서 White Paper

--7 --> delete --189 --> merge DECLARE cur DBMS_SQLTUNE.SQLSET_CURSOR; BEGIN OPEN cur FOR SELECT VALUE(P) FROM table( DBMS_SQLTUNE.SELECT_CURSOR_CACHE( 'parsing_schema_name in (''MAXGAUGE'') and upper(sql_text) like ''%EXEM_T1%'' AND command_type IN (2,3,6,7,189)', NULL, NULL, NULL, NULL, 1, NULL, 'ALL')) P; DBMS_SQLTUNE.LOAD_SQLSET(sqlset_name => 'OKR_TEST',populate_cursor => cur); END; ----update and delete SQL statements from an STS based on a search condition --BEGIN -- DBMS_SQLTUNE.DELETE_SQLSET( -- sqlset_name => 'my_sql_tuning_set', -- basic_filter => 'executions < 50'); --END; --/ -- -- Task 생성확인 select count(1) from DBA_SQLSET_STATEMENTS where sqlset_name = 'OKR_TEST' --count(1) --4 -- 생성 DECLARE TNAME VARCHAR2(30); BEGIN TNAME := DBMS_SQLPA.CREATE_ANALYSIS_TASK( SQLSET_NAME => 'OKR_TEST', BASIC_FILTER => NULL, ORDER_BY => 'EXECUTIONS', TOP_SQL => 100 Part 1 ORACLE 117

, TASK_NAME => 'OKR_SPA', DESCRIPTION => NULL, SQLSET_OWNER => NULL ); END; -- EXECUTE_ANALYSIS_TASK -- 가장빠른방법은 execution_type => 'CONVERT SQLSET' -- ANALYSIS_TASK 생성 begin DBMS_SQLPA.EXECUTE_ANALYSIS_TASK( task_name => 'OKR_SPA', execution_type => 'EXECUTE', execution_name => 'OKR_BEFORE'); end; -- 생성결과조회 select execution_name,status,execution_end,execution_end from USER_ADVISOR_EXECUTIONS where task_name = 'OKR_SPA'; --EXECUTION_NAME STATUS EXECUTION_END --OKR_BEFORE COMPLETED 2013-07-02 오후 3:04:03 3. SCHEMA or TABLE Pending Statistcs 설정 -- 조회결과가 TRUE 이면 Pending 이걸려있지않은상태다 SELECT DBMS_STATS.GET_PREFS('PUBLISH', 'maxgauge', 'EXeM_T1') PUBLISH FROM DUAL; --PUBLISH --TRUE -- FALSE 로변경 -> 운영간에통계정보생성에의한플랜변경을막기위한조치 Exec dbms_stats.set_schema_prefs('maxgauge', pname => 'PUBLISH', pvalue => 'FALSE'); 118 2013 기술백서 White Paper

4. 통계정보수집 -- 거의대부분의데이터를지우고 Histogram 도생성하기때문에인덱스를이용함 delete exem_t1 where c2 = 'A' -- 통계정보재생성 exec dbms_stats.gather_table_stats(ownname =>'MAXGAUGE', tabname =>'EXEM_T1', no_invalidate =>FALSE, method_opt =>'for all columns size 3', estimate_percent=>10); -- Pending 통계조회 SELECT * FROM DBA_TAB_PENDING_STATS WHERE TABLE_NAME = 'EXEM_T1' -- 하지만통계를 Pending 했으므로여전히 FTS 플랜 select count(c1) from exem_t1 where c2 = :b1; --Pending 상태에서수집한최신통계정보를이용해서 SPA 수행 5. Session Use Pending Statistics 설정 alter session set optimizer_use_pending_statistics = TRUE; -- 하지만통계를 Pending 했으므로여전히 FTS 플랜 select count(c1) from exem_t1 where c2 = :b1; 6. ANALYSIS_TASK #2 생성 -- OKR_AFTER 이름으로 TASK 를만든다. begin DBMS_SQLPA.EXECUTE_ANALYSIS_TASK( Part 1 ORACLE 119

task_name => 'OKR_SPA', execution_type => 'EXECUTE', execution_name => 'OKR_AFTER'); 새섹션 2 페이지 5 execution_name => 'OKR_AFTER'); end; 7. ANALYSIS_TASK #1, #2 비교 begin DBMS_SQLPA.EXECUTE_ANALYSIS_TASK( task_name => 'OKR_SPA', execution_type => 'COMPARE PERFORMANCE', execution_name => 'OKR_COMP', execution_params => dbms_advisor.arglist( 'execution_name1', 'OKR_BEFORE', 'execution_name2', 'OKR_AFTER' ) ); end; 8. 리포팅 set long 100000 longchunksize 100000 linesize 200 head off feedback off echo off spool report.html SELECT dbms_sqlpa.report_analysis_task('okr_spa', 'HTML', 'ALL','ALL') FROM dual; spool off --Click here to see the file report.html in html formart ; 120 2013 기술백서 White Paper

9. 비교결과조회스크립트 with TMP as ( select /*+ materialize */ Part 1 ORACLE 121

b.sql_id,b.plan_hash_value b_ph,a.plan_hash_value a_ph,case when (b.buffer_gets-a.buffer_gets) >= 0 then ' 개선 ' when (b.buffer_gets-a.buffer_gets) < 0 then ' 저하 ' end " 성능 ",b.optimizer_cost b_cost,a.optimizer_cost a_cost,b.executions b_exec,a.executions a_exec,b.rows_processed b_rows,a.rows_processed a_rows,b.elapsed_time B_ET,a.elapsed_time A_ET,b.buffer_gets B_BG,a.buffer_gets A_BG,b.disk_reads b_dr,a.disk_reads a_dr,round(100- (decode(a.buffer_gets,0,1,a.buffer_gets)/decode(b.buffer_gets,0,1,b.buffer_gets))*100, 1) bg_rate,round(100- (decode(a.elapsed_time,0,1,a.elapsed_time)/decode(b.elapsed_time,0,1,b.elapsed_time))* 100,1) et_rate from dba_advisor_sqlstats b,dba_advisor_sqlstats a where 1=1 and b.execution_name = :before and a.execution_name = :after and a.sql_id = b.sql_id and a.plan_hash_value <> b.plan_hash_value ) select /*+ leading(a) use_nl(r) */ hash_value hv,a.*,parsing_schema_name pars_nm,sql_profile Pf,module,executions R_EXEC 122 2013 기술백서 White Paper

,round(buffer_gets/decode(executions,0,1,executions),0) R_BG,round(DISK_READS/decode(executions,0,1,executions),1) R_DR,round(ROWS_PROCESSED/decode(executions,0,1,executions),0) R_ROWS,round(ELAPSED_TIME/decode(executions,0,1,executions)/1000000,1) R_ET,round(CPU_TIME/decode(executions,0,1,executions)/1000000,1) R_CT,last_active_time last_t,first_load_time first_t,sql_fulltext text from tmp a,v$sqlarea r where a.sql_id = r.sql_id 5. 마치며 본문서의내용은프로그램으로치면 "Hello World" 이다. 꼭내용을숙지하고스크립트나엑셀 메크로등으로자동화하여업무에적용하길바란다. 이론은절대경험을이기지못한다. Part 1 ORACLE 123