Optimizing Oracle Optimizer (2011년)
Cost란 무엇인가? 0 0 4,142

by 구루비스터디 CBO Cost Optimizer [2018.07.14]


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


  • 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
"데이터베이스 스터디모임" 에서 2009년에 "OPTIMIZING ORACLE OPTIMIZER " 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/3900

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입