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)이다.
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
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가지 주된 원인
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 (ORACLE 9i까지) = Single Block I/O Count + Multi Block I/O Count