by-nc-sa     개발자, DBA가 함께 만들어가는 구루비 지식창고!

Cost란 무엇인가?




Cost란 무엇인가?

Jonathan Lewis

The cost represents ( and has always represented) the optimizer's best estimate of the time it will take to execute the statement

Cost란 Optimizer가 문장을 수행하는데 걸릴 것이라고 예상하는 추측시간을 의미하며, 과거에도 그래왔다.

Cost는 I/O가 아니라 Query의 예상 수행시간(Time)이다.

Time으로써의 Cost?

Total Time(쿼리를 수행하는데 걸리는 시간)

Total Time = CPU Time + I/O Time + Wait Time

Estimated Time(쿼리수행예측시간) = Estimated CPU Time + Estimated I/O Time

Estimated Time = Estimated CPU Time + Estimated I/O Time =Estimated CPU Time + Estimated Single Block I/O Time + Multi Block I/O Time

  • Single Block I/O : 한 번에 하나의 블록만을 읽어 들이는 방식. Random Access I/O에서 발생하며 Index Lookup이나 ROWID Lookup등의 작업과 관련있음.
  • Multi Block I/O : 한번에 여러개의 인접한 블록을 동시에 읽어 들이는 방식. Sequential Access I/O에서 발생하며 Table Full Scan이나 Index Fast Full Scan등의 작업과 관련
Cost를 구하는 공식

Cost = (Estimated Time / Single Block I/O time) = (Single Block I/O Count) + (Multi Block I/O Time / Single Block I/O Time) + (CPU Time / Single Block I/O Time)
= Single Block I/O Count + Adjusted Multi Block I/O Count + Adjusted CPU Count

그림1참조

COST : 모든 예상 수행시간을 Single Block I/o Time에 대한 가중치를 고려한 count(수행횟수) 값으로 변환

비용기반의 오라클 원리-Jonathan Lewis저

비용 = ( #SRds * sreadtim + #MRds * mreadtim + #CPUCycles / cpuspeed) / sreadtim

#SRds - 단일블록 읽기 요청 횟수
#MRds - 다중블록 읽기 요청 횟수
#CPUCycles - CPU Cycle 수
sreadtim - 단일블록 읽기 시간
mreadtim - 다중블록 읽기 시간
cpuspeed - 초당 CPU cycle 수

비용기반 옵티마이져가 오류를 범하는 6가지 주된 원인

  • 비용모델이 몇가지 잘못된 가정을 포함하고 있다.
  • 데이터 분포에 대한 통계정보가 있기는 하지만, 잘못 이해될 수 있다.
  • 데이터 분포에 대한 통계가 없다.
  • 하드웨어의 성능 특성을 모른다.
  • 현재의 작업부하를 모른다.
  • 실행코드 안에 버그가 있다.

System Statistics

Cost의 의미는 OPTIMIZER_COST_MODEL 파라메터에 의해 결정된다.

ORACLE 9i - System Statistics

System Statistics가 있으면 CPU Model을 사용하고, System Statistics가 없으면 I/O Model을 사용하라.
즉 System Statistics가 있으면 Time 기반으로 Cost를 계산하고,
System Statistics가 없으면 I/O기반으로 Cost를 계산하라.

ORACLE 10g - Noworkload System Statistics

오라클이 일을 하지 않은 상태(Noworkload)의 System Statistics.

만약 DBA가 System Statistics를 수동으로 수집하지 않았다면 ORACLE 9i에서는 I/O Model이 사용되며
ORACLE 10g에서는 Noworkload System Statistics를 이용하기 때문에 CPU Model이 사용된다.

I/O로서의 Cost

I/O기반의 Cost (ORACLE 9i까지) = Single Block I/O Count + Multi Block I/O Count

문서정보

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.