10g optimizer개념및통계치 생성방법,sql tuning 방법1 10g optimizer개념및통계치...

16
1 10g Optimizer개념 및 통계치 생성 방법,SQL Tuning 방법 2004/05/24 Hyungil.Kim 2004/08/02 Hyungil.Kim(수정) 2004/08/23 Hyungil.Kim(수정)

Upload: others

Post on 30-Aug-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 10g Optimizer개념및통계치 생성방법,SQL Tuning 방법1 10g Optimizer개념및통계치 생성방법,SQL Tuning 방법 2004/05/24 Hyungil.Kim 2004/08/02 Hyungil.Kim(수정)

1

10g Optimizer개념및통계치생성방법,SQL Tuning 방법

2004/05/24 Hyungil.Kim

2004/08/02 Hyungil.Kim(수정)

2004/08/23 Hyungil.Kim(수정)

Page 2: 10g Optimizer개념및통계치 생성방법,SQL Tuning 방법1 10g Optimizer개념및통계치 생성방법,SQL Tuning 방법 2004/05/24 Hyungil.Kim 2004/08/02 Hyungil.Kim(수정)

2

목차

■ 10g에서 Statistics 생성필요부분■ 10g에서 Statistics 생성방법.

System statistics 생성방법Fixed Objects Statistics생성방법Dictionary Statistics생성방법

■ 10g Optimizer vs 9i Optimizer의차이■ SQL Tuning Advisor( ATO)■ Automatic Tuning Optimizer 활용■ SQL Tuning의현재와과거의비교

■ 10g Tuning 방법론■ Runtime시 Optimizer Behaviors

Page 3: 10g Optimizer개념및통계치 생성방법,SQL Tuning 방법1 10g Optimizer개념및통계치 생성방법,SQL Tuning 방법 2004/05/24 Hyungil.Kim 2004/08/02 Hyungil.Kim(수정)

3

10g에서 Statistics 생성필요부분.

1. System StatisticsSystem Statistics는 system hardware의 I/O, CPU의특성을분석하여 Optimizer가 CPU costing을계산할때사용하는정보.이를이용하여 optimizer가임의의 SQL에대한실행계획을수립할때이를기반으로계산하게 된다.

2. Fixed Objects StatisticsDynamic performance View와같은 fixed view (x$ tables)에대한통계치는 manual한 gathering이필요하다. 이 fixed objects statistics는 database의 activity를기록하게되므로 database가일반적인운영상태일때gathering 하여야한다. 일반적으로 Fixed Object Statistics 통계치는 V$ view를조회하는사용자 query에필요하다.

3. Dictionary Statistics (sys, system schema and etc)DBMS_STATS.GATHER_DICTIONARY_STATS를이용하여 sys, system schema의 object를 gathering한다. 이 procedure는또한 DRSYS나 CTX user schema의 object도함께 gathering한다.

4. User Table Statistics사용자의 object에대한통계치수집은 10g에서제공되는기본적인 GATHER_STATS_JOB을이용한다. 이 job은기존 data의10% 이상의변경이있거나, 오랫동안통계치가변경되지않거나, 통계치가없거나한 object에대한 gathering을수행한다. 또한분석하는순서역시 우선순위 순으로수행한다.만약 object에많은 data가 load되거나변경이있는경우에는 manual하게수행한다.

Page 4: 10g Optimizer개념및통계치 생성방법,SQL Tuning 방법1 10g Optimizer개념및통계치 생성방법,SQL Tuning 방법 2004/05/24 Hyungil.Kim 2004/08/02 Hyungil.Kim(수정)

4

10g에서 Statistics 생성방법.

GATHER_DATABASE_STATS(OPTIONS=>'GATHER AUTO')

GATHER_DATABASE_STATS with GATHER_FIXED

Fixed object

Statistics

대량의 load, purge작업등의많은 User Data를수정한경우에는즉시통계치생성 작업을수행한다.

GATHER_STATS_JOB조건없음자동수행User Schema

Statistics

Sys, system의소유인dictionary table에대한통계치를수집한다.

%$ table에대해사용되지않거나, volatile한 object에대해서는수집하지않을수있다.()

GATHER_SCHEMA_STATS('SYS') GATHER_DICTIONARY_STATS

일반적인

Load시

1회,

변경시Dictionary

Statistics

Fixed view의통계치를생성하므로 system의정상운영상태(load)에서수행한다.

새로운요구나 application에의해동시사용 user의변동이있을경우에다시수집한다.

X$ table에대해사용되지않거나, volatile한 object에대해서는 수집하지않을수있다.(x$lcr등)

GATHER_FIXED_OBJECTS_STATS

일반적인

Load시

1회,

사용자수가변경되었을때

시스템의정보를 gathering한다.

만약주간 OLTP Job과야간 BATCH Job의작업이구분되는경우에는 time window에따른통계치를 import하여사용한다.

비고

GATHER_SYSTEM_STATS

실행 방법

일반적인

Load시

분석환경

1회,

시스템

HW 사양

변경시

System

Statistics

실행 주기구분

Page 5: 10g Optimizer개념및통계치 생성방법,SQL Tuning 방법1 10g Optimizer개념및통계치 생성방법,SQL Tuning 방법 2004/05/24 Hyungil.Kim 2004/08/02 Hyungil.Kim(수정)

5

System statistics 생성방법

RAC에서 node가 서로 같은 시스템 사양을 같지 않을 경우에는 System statistics를 node별로 나누어 관리되지 않으므로 그러므로 전체 System의 대표성을 가지는 node에서 수행을 한다.

특히 위와 같은 결정을 하기 위해서는, 각각의 node별로 통계치를 생성해 보고 비교해 본 후에 결정할 수 있을 것이다.

고려사항

Gathering하면서바로시스템에적용하는방법

EXEC DBMS_STATS.GATHER_SYSTEM_STATS(gathering_mode => 'INTERVAL', interval=>10);

통계치의 종류(oltp, batch, week days, week ends, day, night)에따른구분생성.

- System statistics의 생성 및 보관을 위한 통계 table생성

exec DBMS_STATS.CREATE_STAT_TABLE(ownname=>'SYSTEM', stattab=>'mystats');

- System statistics 통계치 생성 작업.(이때 system에 load를 일정량 준다.)

exec DBMS_STATS.GATHER_SYSTEM_STATS (gathering_mode => 'INTERVAL', interval=>10, stattab=>'mystats',statid=>'DAY', statown=>'SYSTEM');

-생성된 정보를 System에 import하여 통계량 정보를 적용한다.

dbms_stats.import_system_stats (stattab=>’mystats’, statid=>’DAY’)

방법2

방법1

작업방법

select * from sys.aux_stats$

- 초기 1회,

- 시스템 자원의 변경이 생겼을 경우. ( Memory, CPU, IO등)

상 세 설 명

작업확인방법

수행주기

구분

Page 6: 10g Optimizer개념및통계치 생성방법,SQL Tuning 방법1 10g Optimizer개념및통계치 생성방법,SQL Tuning 방법 2004/05/24 Hyungil.Kim 2004/08/02 Hyungil.Kim(수정)

6

RAC에서는 아직 Fixed Objects Statistics를 instance별로 구분하지 않기 때문에, 가장 부하가 많은node( instance)에서 통계치를 조사한다.

고려사항

Gathering하면서바로시스템에적용하는방법exec DBMS_STATS.GATHER_FIXED_OBJECTS_STATS

통계치의 종류(oltp, batch, week days, week ends, day, night)에따른구분생성.

- Fixed Objects statistics의 생성 및 보관을 위한 통계 table생성

exec DBMS_STATS.CREATE_STAT_TABLE(ownname=>'SYSTEM', stattab=>'mystats');

- Fixed Objects 통계치 생성 작업.(이때 system에 load를 일정량 준다.)

exec DBMS_STATS.GATHER_FIXED_OBJECTS_STATS (stattab=>'mystats',statid=>'DAY', statown=>'SYSTEM');

-생성된 정보를 System에 import하여 통계량 정보를 적용한다.

dbms_stats.import_fixed_objects_stats (stattab=>’mystats’, statid=>’DAY’)

방법2

방법1

작업방법

select table_name,

to_char(last_analyzed, 'yyyymmdd hh24:mi:ss hh24:mi:ss')

from dba_tab_statistics

where table_name like 'X$%';Note that the database can decide not to collect stats for objects that were either never used or are totally volatile.

- 초기 1회

- 추가적인 application이나 변경으로 동시 사용자 등의 변경이 있는 경우 수행.

상 세 설 명

작업확인방법

수행주기

구분

Fixed Objects Statistics생성방법

Page 7: 10g Optimizer개념및통계치 생성방법,SQL Tuning 방법1 10g Optimizer개념및통계치 생성방법,SQL Tuning 방법 2004/05/24 Hyungil.Kim 2004/08/02 Hyungil.Kim(수정)

7

Gathering하면서바로시스템에적용하는방법

exec DBMS_STATS.GATHER_DICTIONARY_STATS

통계치의 종류(oltp, batch, week days, week ends, day, night)에따른구분생성.

- Fixed Objects statistics의 생성 및 보관을 위한 통계 table생성

exec DBMS_STATS.CREATE_STAT_TABLE(ownname=>'SYSTEM', stattab=>'mystats');

- Fixed Objects 통계치 생성 작업.(이때 system에 load를 일정량 준다.)

exec DBMS_STATS. GATHER_DICTIONARY_STATS (stattab=>'mystats',statid=>'DAY', statown=>'SYSTEM');

-생성된 정보를 System에 import하여 통계량 정보를 적용한다.

E xec dbms_stats.import_dictionary_stats (stattab=>’mystats’, statid=>’DAY’)

방법2

방법1

작업방법

select table_name,

to_char(last_analyzed, 'yyyymmdd hh24:mi:ss hh24:mi:ss')

from dba_tab_statistics

where table_name like '%$';

Note that the database can decide not to collect stats for objects that were either never used or are totally volatile.

- 초기 1회

- Database Object(사용자 Table, PL/SQL, User생성)의 변경이 있는 경우

상 세 설 명

작업확인방법

수행주기

구분

Dictionary Statistics생성방법

Page 8: 10g Optimizer개념및통계치 생성방법,SQL Tuning 방법1 10g Optimizer개념및통계치 생성방법,SQL Tuning 방법 2004/05/24 Hyungil.Kim 2004/08/02 Hyungil.Kim(수정)

8

10g Optimizer의변경사항

■ Optimizer의비용계산의방식의 Version별차이.

■ Statistics 참고방식Object에대한통계량(statistics)이 Missing되거나오래된(stale) 통계량에대해서는 Dynamic Sampling을통해조사.

■ Rule Base Optimizer는사용할수있으나더이상지원하지않을것임.Default Optimizer Mode는 ALL_ROWS

■ Tuning Mode Optimizer지원SQL Tuning Advisor를사용할때에 Tuning Mode Optimizer를사용한다.Tuning Mode( Automatic Tuning Optimizer, ATO)

SQL Tuning Advisor가 ATO를이용한다.ATO는 high-load SQL에대해서만사용한다.

I/O + CPUOracle 10g

I/O + CPU(cpu intensive job의경우만)Oracle 9i

I/O 비용계산위주Oracle7,8,8i

비용 계산 방식Oracle Version

Page 9: 10g Optimizer개념및통계치 생성방법,SQL Tuning 방법1 10g Optimizer개념및통계치 생성방법,SQL Tuning 방법 2004/05/24 Hyungil.Kim 2004/08/02 Hyungil.Kim(수정)

9

최적의실행계획을위한권고 사항및적용방법

SQL Profile 및 Profile 적용권고

실행계획(used internally)Output

최적의 Plan을만들수있도록다양한추가조사를한다.짧은시간에가능한 좋은 Plan을만든다.목표

수십 ms 내에 수행

Normal Mode

시간에제약받지않고수행.Parsing

Automatic SQL Tuning

ATO의특성■ 10g 이전의 Tuning 작업의 Tuning 작업에비해 Tuner의작업량을줄여주는 10g의신기능

■ 많은 Resource를사용하고오랫동안수행되는악성 SQL을대상으로사용한다.

■ Normal mode의 plan보다더좋은 Plan을만들기위해추가적인분석을한다.

■ Profile information은변경할수없는 packaged SQL에대한 Tuning시효과적이다.=> 즉, SQL의변경없이, 다양한통계정보만을가지고최적의 execution plan을만들수있도록한다.

■ ATO는 execution plan을직접생성하지않고, 성능을 획기적으로개선할수있는여러가지작업리스트를권고한다. 또한이러한권고된작업을수용할경우의개선의정도를함께보여준다.

■ 하나의 SQL이나 SQL의집합을 input으로사용한다. SQL의집합은 AWR Repository나 SQL Cache로부터다양한조건으로추출할수있다.

■ Tuning Mode의 Optimizer는하나의 SQL을분석하기위해몇분을수행할수도있다.

Optimizer의속성비교

SQL Tuning Advisor( ATO)

Page 10: 10g Optimizer개념및통계치 생성방법,SQL Tuning 방법1 10g Optimizer개념및통계치 생성방법,SQL Tuning 방법 2004/05/24 Hyungil.Kim 2004/08/02 Hyungil.Kim(수정)

10

SQL Tuning Advisor( ATO)

SQL Tuning Advisor가하는일.1. Statistics Analysis

object들의통계치가없는것이있는지아니면오래된것이있는지확인한다.이러한경우에는통계대신사용하기위해 대체정보를 collect한다.(dynamic sampling)

2. SQL ProfilingSQL의부분수행통계치와대체정보를점검하고, custom optimizer setting에따른해당 SQL수행정보에대한것을이용하여 Profile을만든다.

3. Access Path Analysis신규 Index가필요한지점검한다.

4. SQL Structure Analysis잘못된구조의 SQL은최적의 plan을만들지못하게한다. 이러한잘못된구조의 SQL을파악하고재구성할수있도록제시한다.

5. 위의 4가지작업에대한종합적인 Guideline을제시한다.

Page 11: 10g Optimizer개념및통계치 생성방법,SQL Tuning 방법1 10g Optimizer개념및통계치 생성방법,SQL Tuning 방법 2004/05/24 Hyungil.Kim 2004/08/02 Hyungil.Kim(수정)

11

SQL Tuning Advisor( ATO)

위의 4가지 작업에 대한 종합적인 Guideline을 제시한다.Guideline 제공

잘못된 구조의 SQL은 최적의 plan을 만들지 못하게 한다. 이러한 잘못된 구조의 SQL을 파악하고 재 구성할 수 있도록 제시한다. 또한 필요시 MV에 대한 생성 권장.

SQL Structure Analysis

추가 Index가 필요한지 점검한다Access Path Analysis

정확한 통계정보 분석을 위해 SQL의 부분 수행

통계치 및 대체 정보를 점검하고, custom optimizer setting에 따른 해당 SQL수행 정보에 대한 것을 이용하여 Profile을 만든다.

SQL Profiling

object들의 통계치가 없는 것(Missing)이 있는지 아니면 오래된 것(Stale)이 있는지 확인한다.

통계치가 없거나 오래된 경우에는 통계 대신 사용하기 위해 대체 정보를 collect한다.(dynamic sampling)

Statistics Analysis

작 업 내 역작 업 종 류

SQL Tuning Advisor가하는일.

Page 12: 10g Optimizer개념및통계치 생성방법,SQL Tuning 방법1 10g Optimizer개념및통계치 생성방법,SQL Tuning 방법 2004/05/24 Hyungil.Kim 2004/08/02 Hyungil.Kim(수정)

12

Automatic Tuning Optimizer 활용

• Complete SQL Management– Automated workload

capture, identification of high-load SQL

– Automatic SQL Tuning– Automatic SQL Analysis – SQL Access Advisor

SQLProfile

PackagedApps

+SQL

Advice

Customizable Apps

+Indexes &

MVs

Well-tuned SQL

High-load SQL

PackagedApps

Customizable Apps

Automatic Tuning Optimizer

Auto SQL Tuning

Auto SQL Analysis

AccessAdvisor

Customizable Apps

+

Page 13: 10g Optimizer개념및통계치 생성방법,SQL Tuning 방법1 10g Optimizer개념및통계치 생성방법,SQL Tuning 방법 2004/05/24 Hyungil.Kim 2004/08/02 Hyungil.Kim(수정)

13

Before1. Examine system utilization2. Look at wait events3. See wait on DB scattered read4. Determine scope – system wide, module-dependent, user-

dependent?5. Identify SQL by (difficult)

� Identifying sessions with high DB scattered read waits and trace them, or� Reviewing Top Sessions in OEM

6. Get explain plan7. Examine objects accessed (size/cardinality)8. Review SQL statistics and/or compare to object statistics (v$sql)

(difficult)9. Identify the problem10. Contact packaged app vendor11. Produce test case for vendor12. Vendor produces patch/upgrade13. Patch/upgrade installed in customer’s next maintenance cycle

Oracle10G1. Review ADDM

recommendations2. Follow link to run

Automatic SQL tuning 3. Accept SQL Profile

recommendations from SQL Tuning

SQL Tuning의현재와과거의비교Scenario: Bad SQL in Packaged Applications

Page 14: 10g Optimizer개념및통계치 생성방법,SQL Tuning 방법1 10g Optimizer개념및통계치 생성방법,SQL Tuning 방법 2004/05/24 Hyungil.Kim 2004/08/02 Hyungil.Kim(수정)

14

10g SQL Tuning 방법론SQL Tuning은일회성의작업이아닌, 계속해서진행하는작업이다.■ System은계속적으로변경된다.(H/W, S/W, Application)■ Data는계속변경된다.■Workload는계속변경된다.

DBA,Tuner

ADDM

Workload

SQL Tuning Advisor

End User Developer

High load

Bad SQLAWRCursorcache

Stress Test

Guide Line- Action List for better

performance- Profile- Script for the action.

Implement

TuningAcceptable?

DBA,Tuner

Manual Tuning

Manual Tuning

Page 15: 10g Optimizer개념및통계치 생성방법,SQL Tuning 방법1 10g Optimizer개념및통계치 생성방법,SQL Tuning 방법 2004/05/24 Hyungil.Kim 2004/08/02 Hyungil.Kim(수정)

15

Runtime시 Optimizer Behaviors

Optimizer(Tuning mode)

createsubmit

SQL Profile

SQL TuningAdvisor

Databaseusers

Well-tuned plan

Optimizer(Normal mode)

Is There a profile for this

SQL?

run

useBest-tuned plan

Normal

Profile Using

Page 16: 10g Optimizer개념및통계치 생성방법,SQL Tuning 방법1 10g Optimizer개념및통계치 생성방법,SQL Tuning 방법 2004/05/24 Hyungil.Kim 2004/08/02 Hyungil.Kim(수정)

16

FAQ

Q] 임의의 SQL이 profile을사용하는지안하는지어떻게알수있는가?=> v$sql의 sql_profile colunm에값이 profile의이름이있으면, 해당 SQL은 profile을이용한것이다.

Q] SQL에대한 profile을어떻게match시키는가?=> optimizer는 SQL과 profile을연동하기위해 hash value와 signature를사용한다.

hash value는 SQL을 normalize( blanks, new lines, case )한후가능한 unique하게 생성한다.

Q] Profile 정보를다른시스템으로이관하는방법은?=> 현재는따로이관하는방법은없음. 다만 full export/import의방법으로는가능.

그러나이방법은권장하지않는방법임. 그이유는, profile에보관하고있는정보는 data, system specific한정보를저장하고있기때문에, 다른 DB로옮기거나다른 system으로옮기는것은이러한정보의오류를증가할수있 다. 또한 full export/import를하더라도이관전과이관후의 plan이같을것이라는보장은하지않은다. 그이유가, profile에는고정된 plan을가지고있는것이아니라 SQL과 Database 환경에대한정보를가지고있기때문이다.

즉시스템을이관하거나, DB를옮기는경우에는 profile을다시생성해주는것이좋음.

Q] RAC환경에서, system statistics와 fixed object statistics는어떻게 gathering하는가?

=> 10g R1에서는 System statistics와 Fixed Object Statistics에대해 node별로다른값을유지하도록지원하지않음.

- system statistics는 RAC를구성하고있는 node들의 H/W 사양이같은경우한 Node에서만수행하면되고가능하면

사양이가장일반적인 node에서수행한다.

- Fixed Object Statistcis는 v$ table을조회하는 SQL에대해서만영향이있다. 그리고수행계획은일반적으로큰 object에

대한통계치를이용하는것이효과적이므로부하가많은 node에서수행한다.