OPTIMIZER & SQL - Tistorycfs8.tistory.com/upload_control/download.blog?fhandle... · 2015-01-22 ·...

30
OPTIMIZER & SQL OPTIMIZER & SQL 엔코아정보컨설팅 박 상용 수석컨설턴트 엔코아정보컨설팅 박 상용 수석컨설턴트

Transcript of OPTIMIZER & SQL - Tistorycfs8.tistory.com/upload_control/download.blog?fhandle... · 2015-01-22 ·...

Page 1: OPTIMIZER & SQL - Tistorycfs8.tistory.com/upload_control/download.blog?fhandle... · 2015-01-22 · 4. SQL 실행계획을 정복하라! RBO (Rule Based Optimizer) 인덱스구조나사용연산자에부여된순위로써최적경로결정

OPTIMIZER & SQLOPTIMIZER & SQL엔코아정보컨설팅 박 상용 수석컨설턴트엔코아정보컨설팅 박 상용 수석컨설턴트

Page 2: OPTIMIZER & SQL - Tistorycfs8.tistory.com/upload_control/download.blog?fhandle... · 2015-01-22 · 4. SQL 실행계획을 정복하라! RBO (Rule Based Optimizer) 인덱스구조나사용연산자에부여된순위로써최적경로결정

1

OPTIMIZING & OPTIMIZEROPTIMIZING & OPTIMIZER

Resource Usage

Response Time

Resource Usage

Response Time

최적화 (Optimizing)최적화최적화 (Optimizing)(Optimizing)

최적화의 대상최적화의최적화의 대상대상

물적 최적화

HardwareSoftwareNetworkApplicationSQLDatabase

물적 최적화

HardwareSoftwareNetworkApplicationSQLDatabase

인적 최적화

풍부한 경험

인식의 전환

도전 의식

인적 최적화

풍부한 경험

인식의 전환

도전 의식

소프트 최적화

적절한 방법론 및 솔루션, 운영방식 적용

프로젝트 성공의 3요소

소프트 최적화

적절한 방법론 및 솔루션, 운영방식 적용

프로젝트 성공의 3요소

Page 3: OPTIMIZER & SQL - Tistorycfs8.tistory.com/upload_control/download.blog?fhandle... · 2015-01-22 · 4. SQL 실행계획을 정복하라! RBO (Rule Based Optimizer) 인덱스구조나사용연산자에부여된순위로써최적경로결정

2

RDB, 왜 쉽고도 어려운가?RDB, 왜 쉽고도 어려운가?

select col1,

col2*10, . .

from account x,

custommer y,

transection z

where x.acct = z.acct

and y.cust = z.cust

and jdate = ‘970609’;

SQLSQL OPTIMIZEROPTIMIZER

Data DictionaryData Dictionary

SQL

해석

SQL

해석

COL$

IND$

OBJ$

TAB$

VIEW$

참조참조

실행실행

customer

transaction

account

DataData

추출추출

사용자는 요구만 하고

Optimizer가 실행계획 수립

수립된 실행계획에 따라 엄청난

수행속도 차이 발생

실행계획 제어가 어렵다.

Optimizer가 최적의 실행계획을

수립할 수 있도록 종합적이고

전략적인 Factor를 부여

비절차형으로 기술해야 함

집합적으로 접근해야 함

SQL이 어떤 역할을 담당하도록

구현할 것인가?

사용자는 요구만 하고

Optimizer가 실행계획 수립

수립된 실행계획에 따라 엄청난

수행속도 차이 발생

실행계획 제어가 어렵다.

Optimizer가 최적의 실행계획을

수립할 수 있도록 종합적이고

전략적인 Factor를 부여

비절차형으로 기술해야 함

집합적으로 접근해야 함

SQL이 어떤 역할을 담당하도록

구현할 것인가?

실행

계획

작성

실행

계획

작성

참조참조

ㄴㅍㄴㅇㄹㅇㄹㄴ 률ㄷㄱ34346

ㅓㅏㄴ아ㅓㅗㄴㅇ ㅓㅜㄴ야ㄷㅈㄷㅂ저

ㅊ리아ㅡㄹ ㅏㅡ치ㅏ ㅜ ㅓ투 93

ㅑㅇ너ㅓㅇㄹ너ㅐㅇ러ㅐㄿㄹㅇㄹ ㅓㅜㄴ ㅑ

ㅑㅕㅜㅑ ㅜ랸웅ㄴ

ㅑ어ㅐ우ㅐㅇ눈애ㅓ래ㅓㅐ앵래 8ㅈ9ㅗ9 ㅗㅑ야 ㅏㄴ어ㅐ

B BB JHBJB M M J ㅐㅜ ㅜㄹ울

애ㅣㅓ애럴애ㅓㄹ애 ㅐ

ㄹ앙ㄹㄹ이ㅏㅡㅈ냐ㅈㄷㅂ989ㅈ돌ㅍㄴㅇㄴ

ㄴ어ㅐㅑㅓ내ㅑ

ㄴㅍㄴㅇㄹㅇㄹㄴ 률ㄷㄱ34346

ㅓㅏㄴ아ㅓㅗㄴㅇ ㅓㅜㄴ야ㄷㅈㄷㅂ저

ㅊ리아ㅡㄹ ㅏㅡ치ㅏ ㅜ ㅓ투 93

ㅑㅇ너ㅓㅇㄹ너ㅐㅇ러ㅐㄿㄹㅇㄹ ㅓㅜㄴ

ㅑㅕㅇ ㅑㅕㅜㅑ ㅜ랸웅ㄴ

ㅑ어ㅐ우ㅐㅇ눈애ㅓ래ㅓㅐ앵래 8ㅈ9ㅗ9 ㅗ

ㅑ야 ㅏㄴ어ㅐㅑ퍼ㅐㅜ ㅜㄹ울

애ㅣㅓ애럴애ㅓㄹ애 ㅐ

ㄹ앙ㄹㄹ이ㅏㅡㅈ냐ㅈㄷㅂ

Page 4: OPTIMIZER & SQL - Tistorycfs8.tistory.com/upload_control/download.blog?fhandle... · 2015-01-22 · 4. SQL 실행계획을 정복하라! RBO (Rule Based Optimizer) 인덱스구조나사용연산자에부여된순위로써최적경로결정

3

SQL 실행계획을 정복하라!SQL 실행계획을 정복하라!

11 Optimizer & Optimizer ModeOptimizer & Optimizer Mode

Optimizer

SQL로 요구된 결과를 최적의 성능을 보장하면서 최소의 비용으로 처리할 수 있도록

처리 경로를 결정하는 DBMS의 일부분

CBO vs. RBO

1) CBO : 통계정보로부터 모든 Access Path 고려하여 실행계획 수립

2) RBO : 미리 정해진 Rule에 따라 실행계획 수립

Optimizer Mode

1) RULE

2) CHOOSE

3) ALL_ROWS

4) FIRST_ROWS

Optimizer

SQL로 요구된 결과를 최적의 성능을 보장하면서 최소의 비용으로 처리할 수 있도록

처리 경로를 결정하는 DBMS의 일부분

CBO vs. RBO

1) CBO : 통계정보로부터 모든 Access Path 고려하여 실행계획 수립

2) RBO : 미리 정해진 Rule에 따라 실행계획 수립

Optimizer Mode

1) RULE

2) CHOOSE

3) ALL_ROWS

4) FIRST_ROWS

Page 5: OPTIMIZER & SQL - Tistorycfs8.tistory.com/upload_control/download.blog?fhandle... · 2015-01-22 · 4. SQL 실행계획을 정복하라! RBO (Rule Based Optimizer) 인덱스구조나사용연산자에부여된순위로써최적경로결정

4

SQL 실행계획을 정복하라!SQL 실행계획을 정복하라!

RBO (Rule Based Optimizer)RBO (Rule Based Optimizer)

인덱스 구조나 사용 연산자에 부여된 순위로써 최적경로 결정

통계정보를 전혀 가지지 않음

경우에 따라 비현실적인 처리경로 수립

수립될 처리경로 예측 가능

사용자가 원하는 처리경로로 유도하기가 용이(수동카메라)

일반적인 보편타당성 있음 (생각보다 높은 신뢰성)

Oracle 10g 부터 지원되지 않음

인덱스 구조나 사용 연산자에 부여된 순위로써 최적경로 결정

통계정보를 전혀 가지지 않음

경우에 따라 비현실적인 처리경로 수립

수립될 처리경로 예측 가능

사용자가 원하는 처리경로로 유도하기가 용이(수동카메라)

일반적인 보편타당성 있음 (생각보다 높은 신뢰성)

Oracle 10g 부터 지원되지 않음

RBO의 적용RBORBO의의 적용적용

Specified in INIT.ORA file• OPTIMIZER_MODE = RULE• OPTIMIZER_MODE = CHOOSE & no statisticsSpecified in Session Level• ALTER SESSION SET OPTIMIZER_MODE = RULE• ALTER SESSION SET OPTIMIZER_MODE = CHOOSE & no statisticsSpecified in SQL Level• Rule Hint (e.g., SELECT /*+ RULE */. . .)

Specified in INIT.ORA file• OPTIMIZER_MODE = RULE• OPTIMIZER_MODE = CHOOSE & no statisticsSpecified in Session Level• ALTER SESSION SET OPTIMIZER_MODE = RULE• ALTER SESSION SET OPTIMIZER_MODE = CHOOSE & no statisticsSpecified in SQL Level• Rule Hint (e.g., SELECT /*+ RULE */. . .)

Page 6: OPTIMIZER & SQL - Tistorycfs8.tistory.com/upload_control/download.blog?fhandle... · 2015-01-22 · 4. SQL 실행계획을 정복하라! RBO (Rule Based Optimizer) 인덱스구조나사용연산자에부여된순위로써최적경로결정

5

SQL 실행계획을 정복하라!SQL 실행계획을 정복하라!

RBO Condition RankingRBO Condition Ranking

1 1 ROWID = constant ROWID = constant 2 2 Cluster join with unique or primary key = constant Cluster join with unique or primary key = constant 3 3 Hash cluster key with unique or primary key = constant Hash cluster key with unique or primary key = constant 4 4 Entire Unique concatenated index = constant Entire Unique concatenated index = constant 5 5 Unique indexed column = constant Unique indexed column = constant 6 6 Entire cluster key = corresponding cluster key of another table Entire cluster key = corresponding cluster key of another table in the same cluster in the same cluster 7 7 Hash cluster key = constant Hash cluster key = constant 8 8 Entire cluster key = constant Entire cluster key = constant 9 9 Entire nonEntire non--UNIQUE CONCATENATED index = constant UNIQUE CONCATENATED index = constant

10 10 NonNon--UNIQUE index merge UNIQUE index merge 11 11 Entire concatenated index = lower bound Entire concatenated index = lower bound 12 12 Most leading Most leading column(scolumn(s) of concatenated index = constant ) of concatenated index = constant 13 13 Indexed column between Indexed column between rangerange or indexed column LIKE or indexed column LIKE ‘…‘…%%’’14 14 NonNon--UNIQUE indexed column between UNIQUE indexed column between rangerange or indexed column like or indexed column like ‘…‘…%' %' 15 15 UNIQUE indexed column or constant (unbounded range) UNIQUE indexed column or constant (unbounded range) 16 16 NonNon--UNIQUE indexed column or constant (unbounded range) UNIQUE indexed column or constant (unbounded range) 17 17 Equality on nonEquality on non--indexed = column or constant (sort/merge join) indexed = column or constant (sort/merge join) 18 18 MAX or MIN of single indexed columns MAX or MIN of single indexed columns 19 19 ORDER BY entire index ORDER BY entire index 20 20 Full table scans Full table scans

Page 7: OPTIMIZER & SQL - Tistorycfs8.tistory.com/upload_control/download.blog?fhandle... · 2015-01-22 · 4. SQL 실행계획을 정복하라! RBO (Rule Based Optimizer) 인덱스구조나사용연산자에부여된순위로써최적경로결정

6

SQL 실행계획을 정복하라!SQL 실행계획을 정복하라!

CBO (Cost Based Optimizer)CBO (Cost Based Optimizer)

통계정보를 이용해 실질적인 비용을 계산하여 최소비용 선택

실제 데이터의 구성상태에 따른 현실적인 처리경로 수립

이론적으로는 규칙기준에 비해 훨씬 진보된 형태

전문지식이 부족하더라도 극단적인 악성 실행계획은 피해갈 수 있음

수립될 처리경로 예측이 곤란 (럭비공)

원하는 처리경로로 유도하기가 곤란 (자동 카메라)

생각만큼 완벽한 처리경로를 얻을 수는 없음

어쩔 수 없는 논리적 한계성 존재

통계정보를 이용해 실질적인 비용을 계산하여 최소비용 선택

실제 데이터의 구성상태에 따른 현실적인 처리경로 수립

이론적으로는 규칙기준에 비해 훨씬 진보된 형태

전문지식이 부족하더라도 극단적인 악성 실행계획은 피해갈 수 있음

수립될 처리경로 예측이 곤란 (럭비공)

원하는 처리경로로 유도하기가 곤란 (자동 카메라)

생각만큼 완벽한 처리경로를 얻을 수는 없음

어쩔 수 없는 논리적 한계성 존재

CBO의 적용CBOCBO의의 적용적용

Specified in INIT.ORA file• OPTIMIZER_MODE = CHOOSE/FIRST_ROWS/ALL_ROWS• Statistics existSpecified in Session Level• ALTER SESSION SET OPTIMIZER_MODE = CHOOSE/FIRST_ROWS/ALL_ROWS• Statistics existSpecified in SQL Level• Hint (e.g., SELECT /*+ FIRST_ROWS or ALL_ROWS */. . .)

Specified in INIT.ORA file• OPTIMIZER_MODE = CHOOSE/FIRST_ROWS/ALL_ROWS• Statistics existSpecified in Session Level• ALTER SESSION SET OPTIMIZER_MODE = CHOOSE/FIRST_ROWS/ALL_ROWS• Statistics existSpecified in SQL Level• Hint (e.g., SELECT /*+ FIRST_ROWS or ALL_ROWS */. . .)

Page 8: OPTIMIZER & SQL - Tistorycfs8.tistory.com/upload_control/download.blog?fhandle... · 2015-01-22 · 4. SQL 실행계획을 정복하라! RBO (Rule Based Optimizer) 인덱스구조나사용연산자에부여된순위로써최적경로결정

7

SQL 실행계획을 정복하라!SQL 실행계획을 정복하라!

CBO ArchitectureCBO Architecture

Query TransformerQuery Transformer

EstimatorEstimator

Plan GeneratorPlan Generator

Transformed QueryTransformed Query

Query + EstimatesQuery + Estimates

DictionaryDictionaryStatisticsStatistics

Query Plan(to Row Source Generator)Query Plan(to Row Source Generator)

• View Merging• Predicate Pushing• Subquery Unnesting• Query Rewrite with Materialized Views

• View Merging• Predicate Pushing• Subquery Unnesting• Query Rewrite with Materialized Views

““더더 좋은좋은 쿼리쿼리 플랜을플랜을 생성생성

할할 수수 있도록있도록 쿼리의쿼리의 형태를형태를

변형하는변형하는 것이것이 유리한가유리한가??””

를를 판단판단

쿼리 변형의 4가지 테크닉쿼리쿼리 변형의변형의 44가지가지 테크닉테크닉

Parsed Query(from Parser)Parsed Query(from Parser)

Page 9: OPTIMIZER & SQL - Tistorycfs8.tistory.com/upload_control/download.blog?fhandle... · 2015-01-22 · 4. SQL 실행계획을 정복하라! RBO (Rule Based Optimizer) 인덱스구조나사용연산자에부여된순위로써최적경로결정

8

SQL 실행계획을 정복하라!SQL 실행계획을 정복하라!

22 Optimizer & SQLOptimizer & SQL

SQL은 저리절차를 기술한 것이 아니라 결과에 대한 요구일 뿐임

처리절차는 Optimizer가 생성, 즉 진정한 프로그래머는 옵티마이저

없는 길을 생성해주는 것이 아니라 이미 존재하는 길을 단지 찾아줄 뿐임

사용자가 부여한 영향요소에 따라 논리적으로 존재하는 최적은 달라짐

(책임은 사용자에게 있음)

최적이란 주어진 상황에 따라 달라지는 것임 : 딜레마?

동일한 결과를 얻을 수 있는 경로는 많으나 효율성의 차이는 큼

옵티마이저는 절대 전지전능하지 않다.

SQL은 저리절차를 기술한 것이 아니라 결과에 대한 요구일 뿐임

처리절차는 Optimizer가 생성, 즉 진정한 프로그래머는 옵티마이저

없는 길을 생성해주는 것이 아니라 이미 존재하는 길을 단지 찾아줄 뿐임

사용자가 부여한 영향요소에 따라 논리적으로 존재하는 최적은 달라짐

(책임은 사용자에게 있음)

최적이란 주어진 상황에 따라 달라지는 것임 : 딜레마?

동일한 결과를 얻을 수 있는 경로는 많으나 효율성의 차이는 큼

옵티마이저는 절대 전지전능하지 않다.

Page 10: OPTIMIZER & SQL - Tistorycfs8.tistory.com/upload_control/download.blog?fhandle... · 2015-01-22 · 4. SQL 실행계획을 정복하라! RBO (Rule Based Optimizer) 인덱스구조나사용연산자에부여된순위로써최적경로결정

9

SQL 실행계획을 정복하라!SQL 실행계획을 정복하라!

33

=, LIKE, …A = ‘상수’,A = :변수…

연산자 형태연산자 형태

SQL 형태SQL 형태SELECT …FROM TABWHERE ...

힌트 사용힌트 사용

SELECT/*+ FULL */ …FROM ...

통계 정보통계 정보

로우로우 수수

분포도분포도

최대값최대값 ......

옵티마이져 모드옵티마이져 모드

RULERULE

ALL_rowsALL_rows

First_rowsFirst_rows

DBMS, 버전DBMS, 버전

OracleOracle

InfomixInfomix ....

V7.4 ...V7.4 ...

분산 DB분산 DB

인덱스, 클러스터링

인덱스, 클러스터링

AA BB CBCB

OPTIMIZEROPTIMIZER

Optimizer 에 영향을 미치는 요소Optimizer 에 영향을 미치는 요소

Page 11: OPTIMIZER & SQL - Tistorycfs8.tistory.com/upload_control/download.blog?fhandle... · 2015-01-22 · 4. SQL 실행계획을 정복하라! RBO (Rule Based Optimizer) 인덱스구조나사용연산자에부여된순위로써최적경로결정

10

SQL 실행계획을 정복하라!SQL 실행계획을 정복하라!

44 Optimizer 의 한계 (1)Optimizer 의 한계 (1)

아무리 많은 정보를 가지고 있더라도 미래를 예측할 수 있는가?

정보는 COST, 얼마나 많은 정보를 가질수 있는가?

아무리 많은 정보를 가지고 있더라도 미래를 예측할 수 있는가?

정보는 COST, 얼마나 많은 정보를 가질수 있는가?

현재의 정보만으로 미래를 예측해야 함현재의 정보만으로 미래를 예측해야 함

컬럼의 사용 연산자별로 정확한 분포도를 얻을 수 있는가?

컬럼의 결합에 따른 정확한 분포도를 얻을 수 있는가?

모든 결합형태에 대한 통계정보를 보유할 수 있겠는가?

단위 컬럼 분포도들의 계산에 의해 산정한 분포도는 정확할 수 있는가?

컬럼간의 결합 분포도는 궁합에 따라 크게 달라짐

컬럼의 사용 연산자별로 정확한 분포도를 얻을 수 있는가?

컬럼의 결합에 따른 정확한 분포도를 얻을 수 있는가?

모든 결합형태에 대한 통계정보를 보유할 수 있겠는가?

단위 컬럼 분포도들의 계산에 의해 산정한 분포도는 정확할 수 있는가?

컬럼간의 결합 분포도는 궁합에 따라 크게 달라짐

분포도 산정의 어려움분포도 산정의 어려움

Page 12: OPTIMIZER & SQL - Tistorycfs8.tistory.com/upload_control/download.blog?fhandle... · 2015-01-22 · 4. SQL 실행계획을 정복하라! RBO (Rule Based Optimizer) 인덱스구조나사용연산자에부여된순위로써최적경로결정

11

SQL 실행계획을 정복하라!SQL 실행계획을 정복하라!

44 Optimizer 의 한계 (2)Optimizer 의 한계 (2)

없는 길을 만들어 낼 수는 없음

SQL 사용 능력과 전략적인 인덱스 구성은 결국 사람이 해야 하는 것임

콩 심은 데 콩 나고 팥 심은 데 팥 난다.

없는 길을 만들어 낼 수는 없음

SQL 사용 능력과 전략적인 인덱스 구성은 결국 사람이 해야 하는 것임

콩 심은 데 콩 나고 팥 심은 데 팥 난다.

논리적으로 이미 존재하고 있는 길을 찾아 줄 뿐 임논리적으로 이미 존재하고 있는 길을 찾아 줄 뿐 임

설사 컬럼 값에 따라 정확한 분포도를 판단할 수 있다 하더라도 변수 상태로

파싱할 때는 무용지물

변수 상태로 파싱할 때는 평균 값에 의존할 수 밖에 없음

그렇다고 해서 모든 SQL을 Dynamic SQL로 사용할 수는 없음

설사 컬럼 값에 따라 정확한 분포도를 판단할 수 있다 하더라도 변수 상태로

파싱할 때는 무용지물

변수 상태로 파싱할 때는 평균 값에 의존할 수 밖에 없음

그렇다고 해서 모든 SQL을 Dynamic SQL로 사용할 수는 없음

대부분 현실에서 사용되는 조건은 변수 형태로 부여대부분 현실에서 사용되는 조건은 변수 형태로 부여

Page 13: OPTIMIZER & SQL - Tistorycfs8.tistory.com/upload_control/download.blog?fhandle... · 2015-01-22 · 4. SQL 실행계획을 정복하라! RBO (Rule Based Optimizer) 인덱스구조나사용연산자에부여된순위로써최적경로결정

12

SQL 실행계획을 정복하라!SQL 실행계획을 정복하라!

55 집합적 사고와 비절차적 SQL의 사용집합적 사고와 비절차적 SQL의 사용

절차형으로 작성된 프로그램 SQL 위주 프로그램

조건1조건조건11

데이터 처리_2데이터데이터 처리처리_2_2데이터 처리_1데이터데이터 처리처리_1_1

조건2조건조건22

SELECT_2SELECT_2SELECT_2

UPDATE_1UPDATE_1UPDATE_1INSERT_1INSERT_1INSERT_1

LOOP_1LOOP_1

SELECT_3SELECT_3SELECT_3

SUB ROUTINE CALLSUB ROUTINE CALLSUB ROUTINE CALL

LOOP_2LOOP_2

SELECT_1SELECT_1SELECT_1

각각의각각의 최적이최적이 전체의전체의 최적일최적일 수는수는 없음없음

SELECT_3SELECT_3SELECT_3SELECT_2SELECT_2SELECT_2

SELECT_1SELECT_1SELECT_1조조인인

다중다중 처리처리

Array INSERTArray INSERT

Array UPDATEArray UPDATE

SQLSQL에에 의해의해 최적화최적화

옵티마이져의 최적화 단위는 SQL

절차형 처리를 최적화하는 옵티마이져는 있을 수 없음

옵티마이져의옵티마이져의 최적화최적화 단위는단위는 SQLSQL

절차형절차형 처리처리를를 최적화하는최적화하는 옵옵티마이져는티마이져는 있있을을 수수 없음없음

Page 14: OPTIMIZER & SQL - Tistorycfs8.tistory.com/upload_control/download.blog?fhandle... · 2015-01-22 · 4. SQL 실행계획을 정복하라! RBO (Rule Based Optimizer) 인덱스구조나사용연산자에부여된순위로써최적경로결정

13

SQL 실행계획을 정복하라!SQL 실행계획을 정복하라!

ID OPERATION OPTIONS OBJECT_NAMEID OPERATION OPTIONS OBJECT_NAME

1 FILTER 2 NESTED LOOPS 3 TABLE ACCESS FULL EMP 4 TABLE ACCESS BY ROWID DEPT 5 INDEX UNIQUE SCAN PK_DEPT 6 TABLE ACCESS FULL SALGRADE

1 FILTER 2 NESTED LOOPS 3 TABLE ACCESS FULL EMP 4 TABLE ACCESS BY ROWID DEPT 5 INDEX UNIQUE SCAN PK_DEPT 6 TABLE ACCESS FULL SALGRADE

SELECT ename, job, sal, dnameFROM emp, deptWHERE emp.deptno = dept.deptnoAND not exists

(SELECT *FROM salgradeWHERE emp.sal BETWEEN losal AND hisal)

SELECT ename, job, sal, dnameFROM emp, deptWHERE emp.deptno = dept.deptnoAND not exists

(SELECT *FROM salgradeWHERE emp.sal BETWEEN losal AND hisal)

FILTERFILTER

NESTEDLOOPSNESTEDLOOPS

TABLE ACCESS(FULL) SALGRADETABLE ACCESS(FULL) SALGRADE

TABLE ACCESS(FULL) EMPTABLE ACCESS(FULL) EMP

TABLE ACCESS(BY ROWID) DEPTTABLE ACCESS(BY ROWID) DEPT

INDEX(UNIQUE SCAN)PK_DEPT

INDEX(UNIQUE SCAN)PK_DEPT

11

22 66

33 44

55

66 SQL 실행계획의 이해SQL 실행계획의 이해

Page 15: OPTIMIZER & SQL - Tistorycfs8.tistory.com/upload_control/download.blog?fhandle... · 2015-01-22 · 4. SQL 실행계획을 정복하라! RBO (Rule Based Optimizer) 인덱스구조나사용연산자에부여된순위로써최적경로결정

14

Dynamic SQL과 Static SQL을 구별하라!Dynamic SQL과 Static SQL을 구별하라!

Static SQL문의 실행절차Static SQLStatic SQL문의문의 실행절차실행절차

입력입력

SQLSQL

ParsingParsing

BindingBinding

ExecuteExecute

Dynamic SQL 실행절차Dynamic SQL Dynamic SQL 실행절차실행절차

입력입력

BindingBinding

SQLSQL

ParsingParsing

ExecuteExecute

Static SQL 문의 특징Static SQL Static SQL 문의문의 특징특징

입력사항에입력사항에 따라따라 최적화처리최적화처리 변동변동

ToolTool에에 따라따라 처리방법이처리방법이 상이상이

. SQL*Forms : Execute_Query,. SQL*Forms : Execute_Query,Enter_QueryEnter_Query

. SQL*Plus : '&'. SQL*Plus : '&'또는또는 '&&''&&'

. . PrecompilerPrecompiler : Dynamic SQL(4 Method): Dynamic SQL(4 Method)ToolTool에서에서 제공되지제공되지 않을않을 경우경우 구현이구현이 복잡복잡

Dynamic SQL의 특징Dynamic SQLDynamic SQL의의 특징특징

입력된입력된 값이값이 BindingBinding되기되기 전에전에 처리경로를처리경로를 확정확정

처리경로로처리경로로 확정된확정된 필드가필드가 입력되지입력되지 않았을않았을 때때,,Performance Performance 저하저하

간단간단 명료하게명료하게 작성작성 가능가능

처리경로가처리경로가 되는되는 필드는필드는 필수필수 입력입력 필드로필드로 설정설정

하거나하거나 실행계획을실행계획을 분리하는분리하는 방안을방안을 검토검토

Union all Union all 혹은혹은 Static SQLStatic SQL을을 로직로직 내에서내에서

IF..THEN..ELSEIF..THEN..ELSE로로 분기분기 처리처리

Page 16: OPTIMIZER & SQL - Tistorycfs8.tistory.com/upload_control/download.blog?fhandle... · 2015-01-22 · 4. SQL 실행계획을 정복하라! RBO (Rule Based Optimizer) 인덱스구조나사용연산자에부여된순위로써최적경로결정

15

Dynamic SQL 사례 – PL/SQLDynamic SQL 사례 – PL/SQL

DECLAREDECLAREx NUMBER := 10;x NUMBER := 10;y NUMBER;y NUMBER;

BEGINBEGINWHILE x <= 500000 LOOPWHILE x <= 500000 LOOPEXECUTE IMMEDIATE EXECUTE IMMEDIATE

'SELECT 100 'SELECT 100 FROM customers FROM customers WHERE WHERE cust_idcust_id = ' || x= ' || xinto y ;into y ;

x := x + 10;x := x + 10;END LOOP;END LOOP;END;

PL/SQL WHILE문 실행시 SQL문이 완성되고, 완성된 SQL문이 실행

1회의 PL/SQL문 실행시 50000번의새로운 SQL문이 파싱되고 실행

SGA SQL영역에 50000개의 SQL문이 순차적으로 적재

PL/SQL WHILEPL/SQL WHILE문문 실행시실행시 SQLSQL문이문이 완완성되고성되고, , 완성된완성된 SQLSQL문이문이 실행실행

11회의회의 PL/SQLPL/SQL문문 실행시실행시 5000050000번의번의새로운새로운 SQLSQL문이문이 파싱되고파싱되고 실행실행

SGA SQLSGA SQL영역에영역에 5000050000개의개의 SQLSQL문문이이 순차적으로순차적으로 적재적재

END;

call count call count cpucpu elapsed disk query current rowselapsed disk query current rows-------------- ------------ ---------------- -------------------- -------------------- -------------------- -------------------- --------------------Parse 50000 Parse 50000 65.57 63.8265.57 63.82 0 34 0 00 34 0 0Execute 50000 2.67 2.29 0 0 Execute 50000 2.67 2.29 0 0 0 00 0Fetch 50000 2.02 1.64 0 100221 Fetch 50000 2.02 1.64 0 100221 0 500000 50000-------------- ------------ ---------------- -------------------- -------------------- -------------------- -------------------- --------------------total 150000 70.26 67.76 0 100255 total 150000 70.26 67.76 0 100255 0 500000 50000

Page 17: OPTIMIZER & SQL - Tistorycfs8.tistory.com/upload_control/download.blog?fhandle... · 2015-01-22 · 4. SQL 실행계획을 정복하라! RBO (Rule Based Optimizer) 인덱스구조나사용연산자에부여된순위로써최적경로결정

16

Static SQL 사례 – PL/SQLStatic SQL 사례 – PL/SQL

DECLAREDECLAREx NUMBER := 10;x NUMBER := 10;y NUMBER;y NUMBER;

BEGINBEGINWHILE x <= 500000 LOOPWHILE x <= 500000 LOOPSELECT 100 into ySELECT 100 into yFROM SH.CUSTOMERSFROM SH.CUSTOMERSWHERE CUST_ID = x;WHERE CUST_ID = x;x := x + 10;x := x + 10;

END LOOP;END LOOP;END;

PL/SQL WHILE문 실행시 변수 바인딩되면서 SQL문이 반복 실행

1회의 PL/SQL문 실행시 1번의 새로운SQL문이 파싱되고 실행

SGA SQL영역에 1개의 SQL문이 적재

PL/SQL WHILEPL/SQL WHILE문문 실행시실행시 변수변수 바인딩바인딩되면서되면서 SQLSQL문이문이 반복반복 실행실행

11회의회의 PL/SQLPL/SQL문문 실행시실행시 11번의번의 새로운새로운SQLSQL문이문이 파싱되고파싱되고 실행실행

SGA SQLSGA SQL영역에영역에 11개의개의 SQLSQL문이문이 적재적재

END;

call count call count cpucpu elapsed disk query current rowselapsed disk query current rows-------------- ------------ ---------------- -------------------- -------------------- -------------------- -------------------- --------------------Parse 1 Parse 1 0.00 0.000.00 0.00 0 0 0 00 0 0 0Execute 50000 1.13 0.78 0 0 Execute 50000 1.13 0.78 0 0 0 00 0Fetch 50000 0.58 0.51 0 100002 Fetch 50000 0.58 0.51 0 100002 0 500000 50000-------------- ------------ ---------------- -------------------- -------------------- -------------------- -------------------- --------------------total 100001 1.71 1.30 0 100002 total 100001 1.71 1.30 0 100002 0 500000 50000

Page 18: OPTIMIZER & SQL - Tistorycfs8.tistory.com/upload_control/download.blog?fhandle... · 2015-01-22 · 4. SQL 실행계획을 정복하라! RBO (Rule Based Optimizer) 인덱스구조나사용연산자에부여된순위로써최적경로결정

17

비용 기준 최적화 (HINT)비용 기준 최적화 (HINT)

SYNTAX

hinttext

/*+ */DELETESELECTUPDATEINSERT

EXAMPLE

SELECT /*+ INDEX(CON STATUS_IDX) 미결된 건은 극히일부이므로, STATUS_INDEX를 사용함 */

*FROM CONTRACTS CONWHERE STATUS= ‘미결' ;

SELECT /*+ INDEX(CON STATUS_IDX) 미결된 건은 극히일부이므로, STATUS_INDEX를 사용함 */

*FROM CONTRACTS CONWHERE STATUS= ‘미결' ;

Page 19: OPTIMIZER & SQL - Tistorycfs8.tistory.com/upload_control/download.blog?fhandle... · 2015-01-22 · 4. SQL 실행계획을 정복하라! RBO (Rule Based Optimizer) 인덱스구조나사용연산자에부여된순위로써최적경로결정

18

비용 기준 최적화 (HINT)비용 기준 최적화 (HINT)

/*+ /*+ INDEX_DESC(tableINDEX_DESC(table index) */index) */

/*+ /*+ INDEX_ASC(tableINDEX_ASC(table index) */index) */

/*+ /*+ HASH(tableHASH(table) */) */

/*+ /*+ CLUSTER(tableCLUSTER(table) */) */

/*+ /*+ ROWID(tableROWID(table) */) */

SELECT /*+ FULL(A) */ * FROM EMP ASELECT /*+ FULL(A) */ * FROM EMP A

/*+ ALL_ROWS *//*+ ALL_ROWS */

/*+ FIRST_ROWS *//*+ FIRST_ROWS */

/*+ RULE *//*+ RULE */

사용사용 예예

지정된지정된 테이블에테이블에 대한대한 해쉬해쉬 스캔스캔HASHHASH

오름차순오름차순 ((역순역순))으로으로 인덱스를인덱스를 스캔스캔INDEX_DESCINDEX_DESC

내림차순내림차순 ((순차적순차적))으로으로 인덱스를인덱스를 스캔스캔INDEX_ASCINDEX_ASC

지정된지정된 테이블에테이블에 대한대한 클러스터클러스터 스캔스캔CLUSTERCLUSTER

지정된지정된 테이블에테이블에 대한대한 ROWIDROWID에에 의한의한 테이블테이블 스캔스캔ROWIDROWID

지정된지정된 테이블에테이블에 대한대한 전체전체 스캔스캔FULLFULL

모든모든 레코드를레코드를 모두모두 처리하는처리하는 시간을시간을 최소화할최소화할 목목

적으로적으로 최적화최적화 (Throughput)(Throughput)ALL_ROWSALL_ROWS

첫째첫째 레코드의레코드의 추출시간을추출시간을 최소화할최소화할 목적으로목적으로 최적최적

화화 (Response Time Goal)(Response Time Goal)FIRST_ROWSFIRST_ROWS

↔↔ CHOOSE, RULE BASED OPTIMIZERCHOOSE, RULE BASED OPTIMIZER를를 사용사용RULERULE

설설 명명기기 능능

Page 20: OPTIMIZER & SQL - Tistorycfs8.tistory.com/upload_control/download.blog?fhandle... · 2015-01-22 · 4. SQL 실행계획을 정복하라! RBO (Rule Based Optimizer) 인덱스구조나사용연산자에부여된순위로써최적경로결정

19

비용 기준 최적화 (HINT)비용 기준 최적화 (HINT)

/*+ /*+ USE_CACHE(tableUSE_CACHE(table) */) */

/*+ USE_HASH(table1 table2) *//*+ USE_HASH(table1 table2) */

/*+ USE_MERGE(table1 table2) *//*+ USE_MERGE(table1 table2) */

/*+ USE_NL(table1 table2) *//*+ USE_NL(table1 table2) */

/*+ ORDERED(table1 table2 table3) *//*+ ORDERED(table1 table2 table3) */

/*+ AND_EQUALS (table index1, ... , /*+ AND_EQUALS (table index1, ... , index5) */index5) */

/*+ /*+ INDEX_FFS(tableINDEX_FFS(table index) */index) */

사용사용 예예

↔↔ NOCACHE, Full table scanNOCACHE, Full table scan시시 blockblock을을 LRULRU의의 MRU MRU

위치에위치에 둔다둔다CACHECACHE

주어진주어진 테이블에테이블에 대하여대하여 HASH JOINHASH JOIN하도록하도록 함함USE_HASHUSE_HASH

주어진주어진 인덱스를인덱스를 FAST FULL SCANFAST FULL SCANINDEX_FFSINDEX_FFS

먼저먼저 각각의각각의 테이블의테이블의 처리범위를처리범위를 스캔하여스캔하여 정열한정열한

후후 서로서로 머지하면서머지하면서 조인조인USE_MERGEUSE_MERGE

먼저먼저 특정특정 테이블의테이블의 행을행을 액세스하여액세스하여 그그 값에값에 해당해당

하는하는 다른다른 테이블의테이블의 행을행을 찾는찾는 작업을작업을 해당범위까해당범위까

지지 실행하는실행하는 조인조인

USE_NLUSE_NL

FROMFROM절에절에 기술된기술된 순서대로순서대로 테이블을테이블을 조인조인ORDEREDORDERED

여러여러 개의개의 인덱스를인덱스를 머지하여머지하여 사용사용 (2~5(2~5개개))AND_EQUALSAND_EQUALS

설설 명명기기 능능

Page 21: OPTIMIZER & SQL - Tistorycfs8.tistory.com/upload_control/download.blog?fhandle... · 2015-01-22 · 4. SQL 실행계획을 정복하라! RBO (Rule Based Optimizer) 인덱스구조나사용연산자에부여된순위로써최적경로결정

20

버전별 HINT 비교버전별 HINT 비교

H I N T 7.x 8.0 8i 9i

OOOOOOOO

OOOO

OOOO

Optimization Approaches and GoalsOptimization Approaches and GoalsALL_ROWSALL_ROWSFIRST_ROWS(n)FIRST_ROWS(n)CHOOSECHOOSERULERULE

Join OrdersJoin OrdersORDEREDORDEREDSTARSTAR

Parallel ExecutionParallel ExecutionPARALLELPARALLELNOPARALLELNOPARALLELPQ_DISTRIBUTEPQ_DISTRIBUTEPARALLEL_INDEXPARALLEL_INDEXNOPARALLEL_INDEXNOPARALLEL_INDEX

OOOOOOOO

OOOO

OOOOOOOOOO

OOOOOOOO

OOOO

OOOO

OOOO

OOOOOOOO

OOOO

OOOOOOOOOO

Page 22: OPTIMIZER & SQL - Tistorycfs8.tistory.com/upload_control/download.blog?fhandle... · 2015-01-22 · 4. SQL 실행계획을 정복하라! RBO (Rule Based Optimizer) 인덱스구조나사용연산자에부여된순위로써최적경로결정

21

버전별 HINT 비교버전별 HINT 비교

OOOOOOO O OOOOOO

OOOO

OO

Access MethodsAccess MethodsFULL FULL ROWIDROWIDCLUSTERCLUSTERHASHHASHINDEXINDEXINDEX_ASCINDEX_ASCINDEX_COMBINEINDEX_COMBINEINDEX_JOININDEX_JOININDEX_DESCINDEX_DESCINDEX_FFSINDEX_FFSNO_INDEXNO_INDEXAND_EQUALAND_EQUAL

OOOOOOO O OOOOOOOOOOOOOOOO

OOOOOOO O OOOOOOOOOOOOOOOO

OOOOOOO O OOOOOO

OOOO

OO

H I N T 7.x 8.0 8i 9i

Page 23: OPTIMIZER & SQL - Tistorycfs8.tistory.com/upload_control/download.blog?fhandle... · 2015-01-22 · 4. SQL 실행계획을 정복하라! RBO (Rule Based Optimizer) 인덱스구조나사용연산자에부여된순위로써최적경로결정

22

버전별 HINT 비교버전별 HINT 비교

OOQuery TransformationsQuery TransformationsUSE_CONCATUSE_CONCAT

NO_EXPANDNO_EXPAND

REWRITEREWRITE

NOREWRITENOREWRITE

MERGEMERGE

NO_MERGENO_MERGE

STAR_TRANSFORMATIONSTAR_TRANSFORMATION

FACTFACT

NO_FACTNO_FACT

OO

OOOOOO

OOOOO O OOOOOOOO

OOOOO O OOOOOOOOOOOO

H I N T 7.x 8.0 8i 9i

Page 24: OPTIMIZER & SQL - Tistorycfs8.tistory.com/upload_control/download.blog?fhandle... · 2015-01-22 · 4. SQL 실행계획을 정복하라! RBO (Rule Based Optimizer) 인덱스구조나사용연산자에부여된순위로써최적경로결정

23

버전별 HINT 비교버전별 HINT 비교

Join OperationsJoin OperationsUSE_NLUSE_NLUSE_MERGEUSE_MERGEUSE_HASHUSE_HASHDRIVING_SITEDRIVING_SITELEADINGLEADINGMERGE_AJMERGE_AJMERGE_SJMERGE_SJHASH_AJHASH_AJHASH_SJHASH_SJNL_AJNL_AJNL_SJNL_SJ

OOOOOOO O OOOOOOOOOO

OOOOOOO O OOOOOOOOOOOOOO

OOOOOOOOOOOO

OO

OOOOOO

OO

OO

H I N T 7.x 8.0 8i 9i

Page 25: OPTIMIZER & SQL - Tistorycfs8.tistory.com/upload_control/download.blog?fhandle... · 2015-01-22 · 4. SQL 실행계획을 정복하라! RBO (Rule Based Optimizer) 인덱스구조나사용연산자에부여된순위로써최적경로결정

24

버전별 HINT 비교버전별 HINT 비교

Additional HintsAdditional HintsAPPENDAPPENDNOAPPENDNOAPPENDCACHECACHENOCACHENOCACHEUNNESTUNNESTNO_UNNESTNO_UNNESTPUSH_(JOIN_)PREDPUSH_(JOIN_)PREDNO_PUSH_(JOIN_)PREDNO_PUSH_(JOIN_)PREDPUSH_SUBQPUSH_SUBQORDERED_PREDICATESORDERED_PREDICATESCURSOR_SHARING_EXACTCURSOR_SHARING_EXACT

OOOOOOO O OOOOOOOOOOOO

OOOOOOO O OOOOOOOOOOOOOO

OOOOOOOO

OOOOOO

OOOO

OO

H I N T 7.x 8.0 8i 9i

Page 26: OPTIMIZER & SQL - Tistorycfs8.tistory.com/upload_control/download.blog?fhandle... · 2015-01-22 · 4. SQL 실행계획을 정복하라! RBO (Rule Based Optimizer) 인덱스구조나사용연산자에부여된순위로써최적경로결정

25

다양한 OPTIMIZING 전략다양한 OPTIMIZING 전략

SQL 실행계획

부분범위 처리

인덱스의 활용 및 액세스 효율의 향상

클러스터링의 활용

IOT, Bitmap, FBI(Function Based Index)

JOIN의 최적화

다중처리(ARRAY PROCESSING)

I/O의 분산 및 SQL AREA 튜닝

적절한 데이터 타입의 사용

Dynamic vs. Static SQL의 실행절차

HINT

SQL 실행계획

부분범위 처리

인덱스의 활용 및 액세스 효율의 향상

클러스터링의 활용

IOT, Bitmap, FBI(Function Based Index)

JOIN의 최적화

다중처리(ARRAY PROCESSING)

I/O의 분산 및 SQL AREA 튜닝

적절한 데이터 타입의 사용

Dynamic vs. Static SQL의 실행절차

HINT

병렬처리

파티셔닝

3-Tier 환경에서의 성능개선

이슈의 이해

병렬처리

파티셔닝

3-Tier 환경에서의 성능개선

이슈의 이해

Page 27: OPTIMIZER & SQL - Tistorycfs8.tistory.com/upload_control/download.blog?fhandle... · 2015-01-22 · 4. SQL 실행계획을 정복하라! RBO (Rule Based Optimizer) 인덱스구조나사용연산자에부여된순위로써최적경로결정

26

SQL 보다 적절한 설계가 먼저다!SQL 보다 적절한 설계가 먼저다!

복잡한 관계복잡한 관계 단순한 관계단순한단순한 관계관계

무엇을 어떻게 이용할 것인가??

단순 명료하면서도 원하는 수행속도를 보장 받을 수 있는가?단순단순 명료하면서도명료하면서도 원하는원하는 수행속도를수행속도를 보장보장 받을받을 수수 있는가있는가??

ERD을 그릴 수 있는 사람은

많이 있지만

데이터를 모델링할 수 있는 사람은

많지 않다 !!!

ERDERD을을 그릴그릴 수수 있는있는 사람은사람은

많이많이 있지만있지만

데이터를데이터를 모델링할모델링할 수수 있는있는 사람은사람은

많지많지 않다않다 !!!!!!

무엇을무엇을 어떻게어떻게 이용할이용할 것인가것인가?

정보의 단절을 어떻게 막을 것인가??정보의정보의 단절을단절을 어떻게어떻게 막을막을 것인가것인가?

융통성과 통합성을 어떻게 유지할 것인가??융통성과융통성과 통합성을통합성을 어떻게어떻게 유지할유지할 것인가것인가?

관계형 데이터베이스 특성을 어떻게 반영할 것인가?관계형관계형 데이터베이스데이터베이스 특성을특성을 어떻게어떻게 반영할반영할 것인가것인가??

Page 28: OPTIMIZER & SQL - Tistorycfs8.tistory.com/upload_control/download.blog?fhandle... · 2015-01-22 · 4. SQL 실행계획을 정복하라! RBO (Rule Based Optimizer) 인덱스구조나사용연산자에부여된순위로써최적경로결정

27

데이터 모델링의 중요성데이터 모델링의 중요성

데이터는 기업의 소중한 자산이며 모든 정보의 기반

모호한 개체 집합 및 관계 정의Process 중심의 개체 집합데이터 중복 및 일관성 문제완벽하지 않은 이력관리

모호한 개체 집합 및 관계 정의Process 중심의 개체 집합데이터 중복 및 일관성 문제완벽하지 않은 이력관리

업무업무 요구를요구를 PGPG변경으로변경으로 수용수용유지보수유지보수 비용비용 증가증가시스템이시스템이 재개발되어도재개발되어도 문제해결문제해결 불가불가정보가정보가 축적될축적될 수록수록 쓰레기만쓰레기만 증가증가

구체적, 입체적인 개체 집합 정의Data 중심의 시스템 기반 구축미래를 위한 정제된 데이터 축적완벽한 이력관리

구체적, 입체적인 개체 집합 정의Data 중심의 시스템 기반 구축미래를 위한 정제된 데이터 축적완벽한 이력관리

업무 요구를 Data 변경으로 수용유지보수 비용 감소시스템이 재개발되어도 PG만 변경정보가 축적될 수록 가치가 증가

업무 요구를 Data 변경으로 수용유지보수 비용 감소시스템이 재개발되어도 PG만 변경정보가 축적될 수록 가치가 증가

무엇이올바른선택인가?

무엇이올바른선택인가?

데이터는 기업의 소중한 자산이며 모든 정보의 기반

Page 29: OPTIMIZER & SQL - Tistorycfs8.tistory.com/upload_control/download.blog?fhandle... · 2015-01-22 · 4. SQL 실행계획을 정복하라! RBO (Rule Based Optimizer) 인덱스구조나사용연산자에부여된순위로써최적경로결정

28

개발자의 인식전환이 관건개발자의 인식전환이 관건

절차형 처리 방식

설계는 대충해도 프로그램에서특별처리하면 된다.

모름지기 모든 처리과정은 내가직접 만들어야 한다.

로직 구사를 잘 하는 사람이우수한 사람이다.

데이터는 한건씩 처리할 수 밖에없다.

데이터는 출력해서 보는 것이다.

100만 건이면 많은 데이터다.

같은 데이터를 동시에 사용하면경합이 생긴다.

경력이 많아지면 관리자가되어야 한다.

절차형절차형 처리처리 방식방식

설계는설계는 대충해도대충해도 프로그램에서프로그램에서

특별처리하면특별처리하면 된다된다..

모름지기모름지기 모든모든 처리과정은처리과정은 내가내가

직접직접 만들어야만들어야 한다한다..

로직로직 구사를구사를 잘잘 하는하는 사람이사람이

우수한우수한 사람이다사람이다..

데이터는데이터는 한건씩한건씩 처리할처리할 수수 밖에밖에

없다없다..

데이터는데이터는 출력해서출력해서 보는보는 것이다것이다. .

100100만만 건이면건이면 많은많은 데이터다데이터다..

같은같은 데이터를데이터를 동시에동시에 사용하면사용하면

경합이경합이 생긴다생긴다..

경력이경력이 많아지면많아지면 관리자가관리자가

되어야되어야 한다한다..

비절차형 처리 방식 (집합 개념)

잘못된 설계는 시스템에 엄청난영향을 미친다.

요구만 잘하면 좋은 처리과정 은저절로 만들어 진다.

DBMS가 좋은 역할을 하도록전략적인 FACTOR를 부여해야...

데이터는 여러 건을 동시에 처리할수 있다.

가능한 온라인 프로그램이 되도록해야 한다.

1000만 건 이하라면 결코 많은데이터가 아니다.

같은 데이터를 동시에 사용하면효율이 더 좋아진다.

경력이 많은 관리자는 많아도경력이 많은 전문가는 흔치 않다.

비절차형비절차형 처리처리 방식방식 ((집합집합 개념개념))

잘못된잘못된 설계는설계는 시스템에시스템에 엄청난엄청난

영향을영향을 미친다미친다..

요구만요구만 잘하면잘하면 좋은좋은 처리과정처리과정 은은

저절로저절로 만들어만들어 진다진다..

DBMSDBMS가가 좋은좋은 역할을역할을 하도록하도록

전략적인전략적인 FACTORFACTOR를를 부여해야부여해야......

데이터는데이터는 여러여러 건을건을 동시에동시에 처리할처리할

수수 있다있다..

가능한가능한 온라인온라인 프로그램이프로그램이 되도록되도록

해야해야 한다한다..

10001000만만 건건 이하라면이하라면 결코결코 많은많은

데이터가데이터가 아니다아니다..

같은같은 데이터를데이터를 동시에동시에 사용하면사용하면

효율이효율이 더더 좋아진다좋아진다..

경력이경력이 많은많은 관리자는관리자는 많아도많아도

경력이경력이 많은많은 전문가는전문가는 흔치흔치 않다않다..

Page 30: OPTIMIZER & SQL - Tistorycfs8.tistory.com/upload_control/download.blog?fhandle... · 2015-01-22 · 4. SQL 실행계획을 정복하라! RBO (Rule Based Optimizer) 인덱스구조나사용연산자에부여된순위로써최적경로결정

29

3-Tier 환경에서의 성능 개선 이슈3-Tier 환경에서의 성능 개선 이슈

누가 어떤 부분을 처리하도록 할 것인가?

호출 횟수를 어떻게 줄일 것인가?

세션을 계속 유지 할 것인가?

누가 어떤 부분을 처리하도록 할 것인가?

호출 횟수를 어떻게 줄일 것인가?

세션을 계속 유지 할 것인가?

PresentationLayer

User

DataLayer

HumanResources

Finance

Sales

Customer

Database

BusinessLayer

AP Server or WAS

3-Tier Architecture

DBMSCall

ServiceCall