Optimizing Oracle Optimizer (2009년)
Time으로서의 Cost 0 0 99,999+

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


Time으로서의 Cost


Oracle에서 Query를 수행하는데 걸리는 시간
  • OWI에서는 I/O Time도 Wait Time의 일종으로 분류하지만 여기서는 별개의 요소라고 간주
  • Total Time = CPU Time + I/O Time + Wait Time


Wait Time은 Optimizer가 예측(Estimation)할 수 있는 범주가 아니므로 Cost에서도 다 무시하여 Oracle에서 Query의 수행 예측 시간은 다음과 같이 계산 된다.
  • Estimated Time = Estimated CPU Time + Estimated I/O Time


Oracle에서 I/O의 분류
  • 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등의 작업과 관련


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


  • EXPLAIN PLAN을 통해서 보는 Cost는 위의 공식에 정규화를 수행하였다.
  • 정규화를 수행하는 방법은 모든 Time을 Single Block I/O Time 으로 나누는 것이다.


왜 이런 정규화가 필요 한가?
  • System Statistics의 개념이 소개되기 전까지는 (혹은 I/O Model이 Cost 계산의 기본 Model 이었을 때는) Cost란 곧 I/O Count 였다.
  • 이 값을 Time으로 변환하는 것이 불가능 하기 때문에 역으로 Time을 I/O Count기준으로 정규화 하는 방법을 선택한 것.



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


  • 즉, 모든 예상 수행 시간(Time)을 평균 Single Block I/O Time에 대한 가중치를 고려한 Count(수행 회수) 값으로 변환 하는데 이것이 Oracle이 Cost라고 부르는 값의 실체이다.
"데이터베이스 스터디모임" 에서 2009년에 "OPTIMIZING ORACLE OPTIMIZER " 도서를 스터디하면서 정리한 내용 입니다.

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

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

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

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