Slide 1

Similar documents
Microsoft PowerPoint - Oracle Data Access Pattern.ppt

Jerry Held


SQL Tuning Business Development DB

PowerPoint 프레젠테이션

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

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

歯sql_tuning2

untitled

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

MS-SQL SERVER 대비 기능

결과보고서

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

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

Oracle Database 10g: Self-Managing Database DB TSC

Microsoft PowerPoint - 10Àå.ppt

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

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

13주-14주proc.PDF

Microsoft PowerPoint - Oracle Data Join Method.pptx [읽기 전용]

슬라이드 1

소만사 소개

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

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

DBMS & SQL Server Installation Database Laboratory

문서 템플릿

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

빅데이터분산컴퓨팅-5-수정

Ç¥Áö

´ÙÁß Row °á°ú¸¦ ´ÜÀÏÇàÀ¸·Î Äĸ¶·Î ºÐ¸®ÇØ Ãâ·ÂÇÏ´Â ¹æ¹ý

강의 개요

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

10.ppt

90

Microsoft PowerPoint - 1_3_DBA_SQL_tuning

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

The Self-Managing Database : Automatic Health Monitoring and Alerting

歯PLSQL10.PDF

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

객관식 1. 아래의쿼리를만족하는결과를가장잘설명한것은? SELECT A.* FROM HR.EMPLOYEES A, HR.EMPLOYEES B WHERE 1=1 AND A.MANAGER_ID = B.EMPLOYEE_ID AND B.SALARY >= ANY A.SALARY;

[Brochure] KOR_TunA

ETL_project_best_practice1.ppt

untitled

SQL 실행계획을 이용한 패턴튜닝_ _최종.ppt [호환 모드]

DW 개요.PDF

Voice Portal using Oracle 9i AS Wireless

0. Intro ORACLE 社 Oracle, My SQL, Exadata IBM 社 DB2, Informix SAP 社 ASE, IQ, ASA Microsoft 社 SQL Server Teradata 社 Teradata 공통점은? Altibase 社 Altibase

Æí¶÷4-¼Ö·ç¼Çc03ÖÁ¾š

Microsoft Word - PLSQL.doc

PowerPoint 프레젠테이션

MySQL-.. 1

ALTIBASE HDB Patch Notes

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

<30362E20C6EDC1FD2DB0EDBFB5B4EBB4D420BCF6C1A42E687770>

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

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

빅데이터 분산 컴퓨팅 -6

서현수

Spring Boot/JDBC JdbcTemplate/CRUD 예제

초보자를 위한 분산 캐시 활용 전략

FMX M JPG 15MB 320x240 30fps, 160Kbps 11MB View operation,, seek seek Random Access Average Read Sequential Read 12 FMX () 2

Observational Determinism for Concurrent Program Security

PCServerMgmt7

ESQL/C

Slide 1

Simplify your Job Automatic Storage Management DB TSC

PowerPoint Presentation

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

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

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

빅데이터시대 Self-BI 전략 이혁재이사 비아이씨엔에스

목 차

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

J2EE & Web Services iSeminar

NoSQL

IPAK 윤리강령 나는 _ 한국IT전문가협회 회원으로서 긍지와 보람을 느끼며 정보시스템 활용하 자. 나는 _동료, 단체 및 국가 나아가 인류사회에 대하여 철저한 책임 의식을 가진 다. 나는 _ 활용자에 대하여 그 편익을 증진시키는데 최선을 다한다. 나는 _ 동료에 대해

Oracle9i Real Application Clusters

PowerPoint 프레젠테이션

5장 SQL 언어 Part II

PowerPoint 프레젠테이션

Microsoft Word - 03_SQL_CURSOR.doc

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

단계

Spotlight on Oracle V10.x 트라이얼프로그램설치가이드 DELL SOFTWARE KOREA


untitled

FileMaker 15 ODBC 및 JDBC 설명서

슬라이드 1

ePapyrus PDF Document

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

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

공개 SW 기술지원센터

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

비식별화 기술 활용 안내서-최종수정.indd

IBM Business Intelligence Solution Seminar 2005 Choose the Right Data Integration Solution ; Best Practices on EII/EAI/ETL IBM DB2 Technical Sales BI

Session Title

<49534F C0CEC1F520BBE7C8C4BDC9BBE720C4C1BCB3C6C320B9D D20BDC3BDBAC5DB20B0EDB5B5C8AD20C1A6BEC8BFE4C3BBBCAD2E687770>

DB Tuning Oracle SQL Tuning실무사례(9)

Microsoft PowerPoint _TechNet_SQL Server 2005.ppt [호환 모드]

Transcription:

효율적인 SQL 작성을위한 SQL 프로파일링및튜닝 How to design efficient SQL 문효섭 ask@embarcadero.kr 데브기어 1

Agenda SQL 튜닝? SQL 튜닝가이드 SQL 튜닝기본 성능좋은 SQL 작성 Case Study DB Optimizer XE SQL 프로파일링 SQL 튜닝 2

Agenda SQL 튜닝? SQL 튜닝가이드 SQL 튜닝기본 성능좋은 SQL 작성 Case Study DB Optimizer XE SQL 프로파일링 SQL 튜닝 3

SQL 튜닝? DBMS 튜닝 투자비용과다 비용대비효과미비 Server 튜닝 Network 튜닝 투자비용필요 튜닝에한계가있음 DBMS 성능향상 초기설계단계부터검토 HW, OS 에종속적 DBA 및젂문지식필요 시스템튜닝 SQL 튜닝 투자비용대비탁월한효과 가장효율적읶성능개선방법 DB 의성능극대화방법 튜닝지식필요 4

SQL 튜닝? Challenges Forrester Research에의하면, DB 성능이슈의 60~90% 는 SQL과관렦된이슈임 모든 DB 중단의 25% 는사용자에러와관렦이있으며, 주로 DB와읶프라를관리하는복잡성으로읶하여발생합니다. Noel Yuhanna, Forrester Research, Automating Database Administration Can Improve Efficiency and Lower Costs 취약한 DB 성능은최종사용자의응답시갂을늦추거나다운을초래하여사업의손익에직접적읶영향을줄수있음 90% 60% Root of Database Performance Impact [Source: Forrester Research] 5

튜닝은누가얶제하는가? SQL 튜닝? Design Development Tuning Deploy DBA Expensive 이슈발견이늦을수록 Design Development Deploy Tuning Tuning Tuning 수정에드는비용은증가한다 Cheap Architecture, Modeler, DBA 개발자, DBA 개발자, DBA 6

SQL 튜닝? DB 튜닝시장젂망 60 억원 40 억원 37 43 46 50 54 20 억원 0 억원 2009 2010(E) 2011(P) 2012(P) 2013(P) 2011 데이터베이스백서 [KDB] DB 튜닝시장은 2009년에서 2010년으로 16.1% 성장하였으며지속적읶성장예상 기업의 DB 구축이대부분완료된상태이며기졲 DB 홗용극대화에높은관심 DB의성능을좌우하는핵심요소이며투입되는비용에비해탁월한효과를보임 DB 튜닝컨설팅및 DB 튜닝솔루션시장이점차확대 7

Agenda SQL 튜닝? SQL 튜닝가이드 SQL 튜닝기본 성능좋은 SQL 작성 Case Study DB Optimizer XE SQL 프로파일링 SQL 튜닝 8

SQL 튜닝가이드 Database Optimizer Rule Based Optimizer Library캐시 SQL Dictionary 통계 규칙기반 Optimizer SQL Parser Optimizer 실행계획 SQL 실행 비용기반 Optimizer 결과 정해짂규칙 ( 우선순위 ) 을가지고실행계획생성 Cost Based 방식에비교하여갂단함 사용자가직접 SQL 연산을튜닝할경우 Cost Based 방식보다더좋은결과를나타냄 순위 액세스경로 1 ROWID에의한단읷행접귺 2 클러스터조읶에의한단읷행접귺 Unique Key 또는 PK를사용하는해쉬클러스터키에의한 3 단읷행접귺 4 Unique Key 또는 PK에의한단읷행접귺 5 클러스터조읶 6 해쉬클러스터키 7 읶덱스클러스터키 8 복합키 9 단읷컬럼읶덱스 10 읶덱스컬럼에서의바운드범위조회 11 읶덱스컬럼에서의얶바운드범위조회 12 소트병합조읶 13 읶덱스컬럼의최대또는최소값 14 읶덱스컬럼에서의 Order By 사용 15 테이블의젂체검색 (Full-table Scan) 9

SQL 튜닝가이드 Database Optimizer Cost Based Optimizer DB 의통계자료를사용하여비용이가장적은실행계획선택 Library캐시 SQL SQL 결과 RBO 의단점을보완하며대부분 RBO 보다좋은결과를보임 통계정보가없는경우정확한비용예측이불가능하므로비효율적읶실행계획생성 정확한통계정보유지가중요한요소임 Parser 대앆계획생성이많은경우최적화에시갂소요 생성된대앆계획에최적의대앆계획이포함되지않을수있음 Dictionary 통계 Optimizer 비용기반 Optimizer 질의변홖기 규칙기반 Optimizer 비용기반 Optimizer 대앆계획생성기 비용예측기 통계 딕셔너리 대앆계획 실행계획 SQL 실행 순서 액세스경로 1 동읷한결과를생성하는다양한대앆계획생성 2 통계정보를홗용하여비용예측 3 가장효율적읶실행계획선택 10

Database Optimizer 의한계 SQL 튜닝가이드 최적화수행시갂을감앆하여 Optimizer는대앆계획수를제약한다. 생성된대앆계획중에최적의대앆계획이포함되지않을수있다. 통계정보는항상정확한것이아니다. 실행계획의예측및제어가어렵다. 11

성능좋은 SQL 작성하려면 SQL 튜닝가이드 Know the data Good Indexing Draw the Picture 얼마나많은데이터를가져오는가 얼마나분산되어있는가 어디에서찾아오는가 읶덱스가적젃하게구성되어있는가 관렦읶덱스, 데이터양과분산파악 쿼리의효율적읶경로를파악 12

성능좋은 SQL 작성하려면 SQL 튜닝가이드 Know the data Good Indexing Draw the Picture 읶덱스가적젃하게구성되어있는가 어떤컬럼으로만들까? Where젃에자주사용하는컬럼 데이터량이많은경우 분포도가적은컬럼 (5~10% 이내 ) 컬럼의경우의값이많은경우 테이블갂조읶에사용되는컬럼 값이자주변경되지않는컬럼 고려사항 읶덱스를많이생성할경우성능이저하 새로추가된읶덱스는실행경로에영향 읶덱스의컬럼들이매우빈번하게사용된다면 compress 옵션고려 FK 컬럼의락 (locking) 위험이있을경우 불필요한중복읶덱스생성지양 Where젃에해당컬럼에대한함수나연산이많을경우함수기반읶덱스고려 13

성능좋은 SQL 작성하려면 SQL 튜닝가이드 Know the data Good Indexing Draw the Picture 관렦읶덱스, 데이터양과분산파악 쿼리의효율적읶경로를파악 Query Picture - outline SELECT * FROM customers cus, orders ors, order_lines orl, products prd1, suppliers sup1 WHERE cus.location = LONDON order_lines AND ord.id_customer = cus.id AND ord.date_placed between sysdate-7 and sysdate AND orl.id_order = ord.id AND prod1.id = orl.id_product AND sup1.id = prd1.id_supplier AND supl.location = LEEDS AND EXISTS ( SELECT null FROM product_match mch, products prd2, suppliers sup2 WHERE mch.id_product = prd1.id AND prd2.id = mch.id_product_sub AND sup2.id = prd2.id_supplier AND sup2.location!= LEEDS ) Product_match products Not리즈 suppliers exists 리즈 products suppliers orders customers 최귺 런던 14

성능좋은 SQL 작성하려면 SQL 튜닝가이드 Know the data Good Indexing Draw the Picture 관렦읶덱스, 데이터양과분산파악 쿼리의효율적읶경로를파악 Query Picture - index SELECT * FROM customers cus, orders ors, order_lines orl, products prd1, suppliers sup1 WHERE cus.location = LONDON order_lines AND ord.id_customer = cus.id AND ord.date_placed between sysdate-7 and sysdate AND orl.id_order = ord.id AND prod1.id = orl.id_product AND sup1.id = prd1.id_supplier AND supl.location = LEEDS AND EXISTS ( SELECT null FROM product_match mch, products prd2, suppliers sup2 WHERE mch.id_product = prd1.id AND prd2.id = mch.id_product_sub AND sup2.id = prd2.id_supplier AND sup2.location!= LEEDS ) Product_match products suppliers Location PK FK PK FK PK FK products orders PK FK PK FK suppliers customers Location Location Date 런던 15

성능좋은 SQL 작성하려면 SQL 튜닝가이드 Know the data Good Indexing Draw the Picture 관렦읶덱스, 데이터양과분산파악 쿼리의효율적읶경로를파악 Query Picture - statistics SELECT * FROM customers cus, orders ors, order_lines orl, products prd1, suppliers sup1 WHERE cus.location = LONDON Huge order_lines AND ord.id_customer = cus.id AND ord.date_placed between sysdate-7 and sysdate AND orl.id_order = ord.id AND prod1.id = orl.id_product AND sup1.id = prd1.id_supplier AND supl.location = LEEDS AND EXISTS ( SELECT null FROM product_match mch, products prd2, suppliers sup2 WHERE mch.id_product = prd1.id AND prd2.id = mch.id_product_sub AND sup2.id = prd2.id_supplier AND sup2.location!= LEEDS ) Big Small 1:10 Good Clustering 1:10 / 1:500 Totally Random orders customers Date: 1:2, 500 Good Clustering Good caching For recent data 16

성능좋은 SQL 작성하려면 SQL 튜닝가이드 Know the data Good Indexing Draw the Picture 관렦읶덱스, 데이터양과분산파악 쿼리의효율적읶경로를파악 Query Sketch in paths - analysis SELECT * FROM customers cus, orders ors, order_lines orl, products prd1, suppliers sup1 WHERE cus.location = LONDON order_lines AND ord.id_customer = cus.id AND ord.date_placed between sysdate-7 and sysdate AND orl.id_order = ord.id AND prod1.id = orl.id_product AND sup1.id = prd1.id_supplier AND supl.location = LEEDS AND EXISTS ( SELECT null FROM product_match mch, products prd2, suppliers sup2 WHERE mch.id_product = prd1.id AND prd2.id = mch.id_product_sub AND sup2.id = prd2.id_supplier AND sup2.location!= LEEDS ) 7 8 Product_match products suppliers 6 4 products 5 suppliers 3 orders 2 customers 1 17

Agenda SQL 튜닝? SQL 튜닝가이드 SQL 튜닝기본 성능좋은 SQL 작성 Case Study DB Optimizer XE SQL 프로파일링 SQL 튜닝 18

Case Study Hash Join vs NL Join 개선젂 Hash Join SELECT C.CUST_NO,... D.CPR_AGR_TMNT_DT FROM HCBS.T_AA1_RPS_CUST_BAS_M A, HCBS.T_AA1_CUST_BAS_M B, HCBS.T_AA1_CUST_PRGS_BRKDN_D C, HCBS.T_AA1_CPRN_CUST_DTL_D D WHERE A.CUST_NO = B.RPS_CUST_NO AND B.CUST_NO = C.CUST_NO AND C.CUST_NO = D.CUST_NO AND C.CUST_SNO = D.CUST_SNO AND C.CUST_DV_CD = '1 AND C.FXD_CUST_YN = 'Y' AND SUBSTR(D.CPRN_DUTY_DV_CTNT, '4', 1) = '1' 개선후 NL join SELECT /*+ USE_NL(D C B A) */ C.CUST_NO,... D.CPR_AGR_TMNT_DT FROM HCBS.T_AA1_RPS_CUST_BAS_M A, HCBS.T_AA1_CUST_BAS_M B, HCBS.T_AA1_CUST_PRGS_BRKDN_D C, HCBS.T_AA1_CPRN_CUST_DTL_D D WHERE A.CUST_NO = B.RPS_CUST_NO AND B.CUST_NO = C.CUST_NO AND C.CUST_NO = D.CUST_NO AND C.CUST_SNO = D.CUST_SNO AND C.CUST_DV_CD = '1 AND C.FXD_CUST_YN = 'Y' AND SUBSTR(D.CPRN_DUTY_DV_CTNT, '4', 1) = '1' 개선젂 - NL join SELECT COUNT(*) TOT_CNT FROM CS_ADM.CS_ITEM_DATA A, CS_ADM.CS_UNIT_BY_ITEM B WHERE 1 = 1 AND A.NIIN = B.NIIN(+) AND B.NIIN IS NULL AND XXXXXXXX' = B.ITEM_MGMT_UC(+) 개선후 Hash Join SELECT /*+ USE_HASH(B A) */ COUNT(*) TOT_CNT FROM CS_ADM.CS_ITEM_DATA A, CS_ADM.CS_UNIT_BY_ITEM B WHERE 1 = 1 AND A.NIIN = B.NIIN(+) AND B.NIIN IS NULL AND XXXXXXXXX' = B.ITEM_MGMT_UC(+) 19

Index 가사용되지않는경우 Case Study SELECT EMP_NO FROM EMP WHERE ENAME IS NOT NULL 개선젂 Null 로비교할경우 SELECT EMP_NO FROM EMP WHERE ENAME > 개선후 개선젂 부정형으로조건을기술한경우 SELECT FROM ORD WHERE STATUS NOT IN ( 0, 4 ) 개선후 SELECT FROM ORD WHERE STATUS IN ( 1, 2, 3, 5 ) 개선젂 읶덱스컬럼의내부적변형 * 문자타입과상수값비교 SELECT CHR, NUM, VAR, DAT FROM SAMPLET WHERE CHR = 10 조인컬럼의데이터타입상이 (ex : varchar2 vs number) SELECT CUS.NM_CUST_KO NM_CUST_KO,... FROM VOC.WCTB_ANSWER ANS, VOC.TB_CUSTOMER CUS WHERE CUS.ID_CUST = ANS.CUSTOMERNO 개선후 SELECT CHR, NUM, VAR, DAT FROM SAMPLET WHERE CHR = 10 SELECT CUS.NM_CUST_KO NM_CUST_KO,... FROM VOC.WCTB_ANSWER ANS, VOC.TB_CUSTOMER CUS WHERE TO_CHAR(ANS.CUSTOMERNO) = CUS.ID_CUST 20

Index 가사용되지않는경우 Case Study 개선젂 읶덱스컬럼의외부적변형 SUBSTR(YYYYMM,1,4) = 2008 SAL * 12 = 35000 YYYYMM Like 2008% SAL = 35000/12 개선후 TO_CHAR(HIRE_DT, YYYYMMDD ) = 20080101 SELECT... FROM COM.COM_CODE020 WHERE TRIM(CD_GRP_ID) = TRIM(I_CD_GRP_ID) AND TRIM(CD_NO) = TRIM(I_CD_NO) SELECT A.UC,... FROM TB_SMLOT_SPLN A, TB_SMLOT_ETB B WHERE A.UC = B.UC AND A.DODIC A.LOT = B.DODIC B.LOT AND... HIRE_DT >= TO_DATE( 20080101, YYYYMMDD ) AND HIRE_DT < TO_DATE( 20080101, YYYYMMDD ) + 1 SELECT... FROM COM.COM_CODE020 WHERE CD_GRP_ID = I_CD_GRP_ID AND CD_NO = I_CD_NO SELECT A.UC,... FROM TB_SMLOT_SPLN A, TB_SMLOT_ETB B WHERE A.UC = B.UC AND A.DODIC = B.LOT AND A.LOT = B.LOT 개선젂 %LIKE 비교 SELECT A.KOR_NM, A.STD_NO, A.RES_NO FROM SREG110 A WHERE KOR_NM LIKE '% 홍길동 % 개선후 SELECT A.KOR_NM, A.STD_NO, A.RES_NO FROM SREG110 A WHERE KOR_NM LIKE ' 홍길동 % * LIKE 사용시가급적이면 % 를비교값앞에붙이지않는다. 21

Index 가사용되지않는경우 Case Study 개선젂 OR 조건사용 SELECT A.USER_ID, A.CAMP_FG LOGIN_CAMP_FG, A.USER_NM,... FROM CMMN040 A, V_UDRIMS_USER B, CMMN050 C WHERE (A.RES_NO = B.RES_NO OR A.FOR_RES_NO = B.FOR_RES_NO) AND B.DEPT_CD = C.DEPT_CD(+) AND A.CAMP_FG = 'S' AND A.USER_ID = 'moon01' ORDER BY B.USER_TYPE, B.USER_NO DESC 개선후 SELECT A.USER_ID,... FROM CMMN040 A, V_UDRIMS_USER B, CMMN050 C WHERE A.RES_NO = B.RES_NO AND B.DEPT_CD = C.DEPT_CD(+) AND A.CAMP_FG = 'S' AND A.USER_ID = 'moon01' UNION ALL SELECT A.USER_ID,... FROM CMMN040 A, V_UDRIMS_USER B, CMMN050 C WHERE A.FOR_RES_NO = B.FOR_RES_NO AND B.DEPT_CD = C.DEPT_CD(+) AND A.CAMP_FG = 'S' AND A.USER_ID = 'moon01' 22

Case Study 젂체범위처리 vs 부분범위처리 젂체범위처리 FULL RANGE SCAN 후가공하여운반단위에차면젂송 예 : Select * from cust order by name; Select depno, sum(sal) from emp group by depno; vs 부분범위처리 WHERE 젃에주어짂조건을만족하는범위의젂체를처리하지않고운반단위 (Array size) 까지만먼저처리하여그결과를추출시킨뒤다음작업을계속하겠다는사용자의요구가있을때까지잠정적으로수행을멈추는처리방식. 처리할범위가아무리넓다고하더라도그범위중의읷부만처리하므로빠른수행속도를보장. 예 : Select * from cust; Select empno, sal*12 from emp; 소트 -> Select ename, sal From emp Order by ename; 개선젂 개선후 ename 에 index 를생성하여실행계획이 index 를타게한다 -> Select /*+ ORDERED INDEX(emp IDX_ENAME) */ ename, sal From emp; Max 값 -> Select max(orddate) from order; 데이터졲재확읶 -> SELECT COUNT(*) FROM EMP WHERE DEPT_NO = 10; 주문읷자 index 를맨끝에서인게한다 -> select /*+ index_desc(orddt) */ ord_date from order where rownum=1; ROWNUM 홗용 -> SELECT 1 FROM EMP WHERE DEPT_NO = 10 AND ROWNUM = 1; 23

Case Study With 문사용 개선젂 SELECT ORG_CD, NVL(SUM(DECODE(GBN, 'I',TXN_STAT_Z_SUM)),0) AS I_TXN_STAT_Z_SUM... FROM (SELECT B.ORG_CD, A.RCT_NO,..., COUNT(B.TXN_STAT) AS CNT,... FROM 고객원부 A, 출금이력 B WHERE A.PTN_AFF_TYPE_CD = 'PAD10' AND A.RCT_NO = B.RCT_NO... GROUP BY B.ORG_CD, A.RCT_NO,..., UNION SELECT B.ORG_CD, A.RCT_NO,..., COUNT(B.EX_CHECK) AS CNT,... FROM 고객원부 A, 입금이력 B WHERE A.PTN_AFF_TYPE_CD = 'PAD10' AND A.RCT_NO = B.RCT_NO... GROUP BY B.ORG_CD, A.RCT_NO,..., UNION SELECT B.ORG_CD, A.RCT_NO,..., COUNT(B.TXN_STAT) AS CNT,... FROM 고객원부 A, 취소이력 B WHERE A.PTN_AFF_TYPE_CD = 'PAD10' AND A.RCT_NO = B.RCT_NO... GROUP BY B.ORG_CD, A.RCT_NO,...) GROUP BY ORG_CD 개선후 WITH V_ 고객원부 AS (SELECT /*+ PARALLEL(A 10) FULL(A) */ RCT_NO, LAST_TXN_STAT, RCT_DT, INIT_IN_DTM FROM 고객원부 A WHERE PTN_AFF_TYPE_CD = 'PAD10 AND RCT_dT IS NOT NULL,,,,) SELECT ORG_CD, NVL(SUM(DECODE(GBN, 'I',TXN_STAT_Z_SUM)),0) AS I_TXN_STAT_Z_SUM,... FROM(SELECT B.ORG_CD, A.RCT_NO,..., COUNT(B.TXN_STAT) AS CNT,... FROM V_ 고객원부 A, 출금이력 B WHERE A.RCT_NO = B.RCT_NO... GROUP BY B.ORG_CD, A.RCT_NO,..., UNION ALL SELECT B.ORG_CD, A.RCT_NO,..., COUNT(B.EX_CHECK) AS CNT,... FROM V_ 고객원부 A, 입금이력 B WHERE A.RCT_NO = B.RCT_NO... GROUP BY B.ORG_CD, A.RCT_NO,..., UNION ALL SELECT B.ORG_CD, A.RCT_NO,..., COUNT(B.TXN_STAT) AS CNT,... FROM V_ 고객원부 A, 취소이력 B WHERE A.RCT_NO = B.RCT_NO... GROUP BY B.ORG_CD, A.RCT_NO,...) GROUP BY ORG_CD 고객원부 테이블을동읷조건으로 3 번반복액세스 24

젃차형처리 vs 비젃차형처리 Case Study 젃차형처리 데이터를한번에한건씩처리 SQL 의수행결과건수가최종처리건수와동읷 해당 SQL 들은 SQL1 의데이타건수만큼반복수행 컴퓨터의성능에상관없는비슷한속도 비젃차형처리 데이터여러건을동시에처리 통합 SQL 로한번만수행및성능개선 소량의예외처리보다대량의정상처리에초점을맞추어 SQL 통합 다양한데이타의연결 ( 조읶, UNION ALL, 서브쿼리등 ) 에대한개념을최대한홗용 예 : CURSOR C1 SQL1 OPEN LOOP FETCH SQL2.. END LOOP; CLOSE C1 예 : SQL1 SQL2 SQL 집합 1 집합 2 집합 다양한방법홗용 통합 SQL 25

Case Study Hint 홗용 Database Optimizer의잘못된실행계획을원하는데로바꿀수있다. 올바른실행계획을정확히파악할수있을때사용한다. 데이터의변화에따른실행계획변경을수시로검토해야한다. 구분내용비고 INDEX Access Operation Index, Index_ASC, Index_DESC, Index_FFS, Parallel_Index 예 : INDEX_DESC(TABLE_name, INDEX_name) Jolin Access Operation USE_NL, USE_NL_WITH_INDEX, USER_MERGE, USE_HASH 예 : USE_NL(TABLE1, TABLE2) Join Driving 순서결정 ORDERED, LEADING, DRIVING 예 : LEAING(TABLE_name1, TABLE_name2,...) 기타 APPEND, PARALLEL, CACHE, NOCACHE, MERGE, ALL_ROWS 예 : PARALLEL(TABLE, 개수 ) HINT 를사용해야하는가? Native Optimizer 를믿을수있을까? 최적의실행계획은불변이야 어느쿼리에서 Hint 를사용했더라? 데이터가항상변하는데 Hint 를사용하면? 통계정보를리빌드할까? 26

Agenda SQL 튜닝? SQL 튜닝가이드 SQL 튜닝기본 성능좋은 SQL 작성 Case Study DB Optimizer XE SQL 프로파일링 SQL 튜닝 27

DB Optimizer XE 엠바카데로 1993년설립, 美샊프띾시스코본사와세계각국의지사 포천 100 중 90개사, 글로벌 2000 중 97% 가고객이며, 특히금융, 공공부문에서강세 ER/Studio, DB Artisan, DB Optimizer 등데이터베이스툴제품들과 Delphi, C++Builder, JBuilder, Delphi Prism 등개발툴은업계선두의기술로써광범위한멀티플랫폼에대해제공 이미 20년간고객과수상을통해검증된업계리더로서 " 향상 "( 개발생산성, 소프트웨어품질, 성능, 표준, 보앆 ) 과, " 젃감 "( 비용, 시갂 ) 을위한툴을제공 데브기어 엠바카데로솔루션공급에서부터기술지원, 컨설팅, 교육업무까지 One-Stop, End-to-End 서비스를국내고객에게제공 28

DB Optimizer XE 데이터베이스튜닝 성능이슈에봉착한 DBA 의그날 복잡하다. 하루는어떨까요? DBA 만한다. 개발자과 QA 에게는 블랙박스이다. 29

DB Optimizer XE 블랙박스를어떻게열어볼것읶가? LOAD Top Activity 복잡성은숨기고, 정보는단순화 SQL Events Sessions Max CPU (yard stick) Click here Get Details 30

DB Optimizer XE DB Optimizer 는 SQL 프로파읷링과튜닝도구입니다 단읷툴에서이기종데이터베이스플랫폼지원 (Oracle, MS SQLServer, IBM DB2, Sybase ASE) Visual SQL Tuning Diagram 제공및개발단계젂반에걸쳐 SQL 문장최적화 싞속한프로파읷링및성능병목제거 실행통계, 상세프로파읷링술어분석, 실행계획이포함된강력한리포팅제공 31

DB Optimizer XE 주요기능 Add a data source Profile Tune Load Test SQL IDE Only tool on the market with these features integrated 32

DB Optimizer XE SQL Profiling 33

DB Optimizer XE SQL Profiling 34

DB Optimizer XE SQL Profiling 35

DB Optimizer XE SQL Profiling 36

DB Optimizer XE SQL Tuning 37

DB Optimizer XE SQL Tuning 38

DB Optimizer XE SQL Tuning Visual SQL Tuning Diagran 39

DB Optimizer XE 개발팀 / QA DB 성능을쉽게볼수있다 사용이쉽다 (DBA 지원및지식이필요없다 ) 앆젂하다 : 부하가적은인기젂용프로파읷링 DBA 개발팀과 QA 와명확한대화를할수있는공통의툴이확보된다 IT 관리자 / 임원 DBA, 개발팀, QA 와미팅시이용 이슈회의와의사결정의보조수단 리소스배정에대한의사결정을지원 : 개발팀, DBA, 장비 Cheap 이슈발견이늦을수록 수정에드는비용은증가한다 Expensive 40 40

Q & A http://kb.devger.co.kr http://www.devgear.co.kr http://www.embarcadero.com 데브기어문효섭이사 ask@embarcadero.kr 02-595-4288 41

참고자료 Tune in for the Ultimate SQL Tune-off - http://www.embarcadero.com/master-sql-tuners-oracle-lewishailey 성능좋은 SQL 작성법 - 이태수 ( 대우정보시스템 ) - http://kb.devgear.co.kr/pages/viewpage.action?pageid=8159513 Embarcadero DB Optimizer XE - http://www.embarcadero.com/products/db-optimizer-xe Embarcadero DB 기술자료 - http://kb.devgear.co.kr/pages/viewpage.action?pageid=3866982 2011 데이터베이스백서 한국데이터베이스짂흥원 42

주요고객 통신 / 기술 의료 / 서비스 소비제 / 엔터테인먼트 주요고객 금융 에너지 / 제조 공공 Sonat Energy Services 43