1. 비용(COST)이란?

조회 수 15933 추천 수 0 2010.01.13 19:41:47
ZoneWorker2 *.223.251.80

CHAPTER 1. 비용(COST)이란?

발표/총정리 - 이태경


옵티마이저 옵션 1 

  비용기반 옵티마이저(CBO)의 구분 분석 대상
           -DML, DDL쿼리 모두

 

    파라미터  optimizer_mode
 
    설정값 1.all_rows
                 2.first_rows_N
                 3.first_rows

   설정값 참고
         - rule : 규칙기반 옵티마이저
         - choose : 런타임 RBO(Rule Based Optimizer) or all_rows 둘 중 하나를 선택함

 

결론 : 서로 다른 방식으로 비용을 산정하지만, 주어진 구문의 결과를 얻는 데 최소의 비용이 드는 실행 메커니즘을 찾는다.

 

 

 


비용(COST)의 의미 3  
/ 박우창

 

비용의 의미

? 비용의 정의와 오류

 

- 비용은 예상 수행 시간이다.(‘cost’ really is ‘estimated time to run’)

-> 그렇기 때문에 예상이 빗나갈 수도 있다.

- 비용 예측이 오류를 범하는 이유

비용 모델 자체에 잘못되 오류가 있다.

데이터 분포에 대한 통계정보가 있지만 통계정보가 정확하지 않다.

데이터 분포에 대한 통계정보가 없다.

하드웨어 성능 특성을 모른다.

현재의 작업부하를 모른다.

실행 코드안에 버그가 있다.

? 오라클 버전에 따른 비용(cost) 예측 방법

- 8i : 비용 = I/O 서브시스템에 대한 요청횟수

       (문제점)  테이블 스캔이 인덱스 경로보다 더 많은 I/O를 요청한다.

                        읽기요청 한번에 여러 블록을 읽기 때문에 오차가 있다.

                        I/O 요청이 캐시에 있는 데이터를 통해서 충족될 수도 있다.

 

- 9i : CPU costing 개념 도입(단일블록 읽기와 다중블록 읽기를 구분+CPU 연산시간을 비용으로 계산하여 합산함)

Cost = (

#SRds * sreadtim + /* #SRDs - number of single block reads */
                                 /* sreadtim - single block read time */
#MRds * mreadtim + /* #MRDs - number of multi block reads */
                                   /* mreadtim - multi block read time */
#CPUCycles / cpuspeed/* #CPUCycles - number of CPU Cycles */
                                   /* cpuspeed - CPU cycles per second */
) / sreadtim

 

- 10g : 오프라인(offline) 옵티마이저 개념 도입

(개념) runtime 통계를 v$sql_plan_statistics, v$sql_plan_statistics_all 에 저장하고 있다가 실 수행 통계가 옵티마이저 가정과 크게 차이날 때 다시 한번 최적화 한다.


 

쿼리 변환과 비용 계산/ 위충환

주의 해야 할 오라클의 중요한 최적화 단계

1. 구문 비용 계산 전 입력 SQL을 동등한 다른구문으로 우선 변형

2. 변형 된 구문의 비용 계산

  • 구문변형은 오라클 버전에 따라

    a) 아예 수행하지 않음

    b) 가능한 항상 수행

    c) 수행 후 비용에 따라 폐기가능


Ex. 집계(avg) View A 와  테이블 B를 집계처리의 기준 컬럼으로 A 와 B 조인 집합


결과 집합을 만드는 메커니즘 ① : 먼저 뷰를 수행하여 중간 집합 생성 후 B 테이블과 조인

실행계획(오라클 9i) : B 테이블 집계 후 View A와 조인

결과 집합을 만드는 메커니즘 ② : 뷰 정의를 쿼리문과 머지 후 변형

 실행계획(오라클 9i) : A, B 조인 후 집계 수행


더 나은 경로

 A와 B의 데이터 분포에 따라 조인에 의해 추가되는 데이터양에 따라  집계를 먼저하는게 유리할 수 있고 조인을 먼저하는 것이 더 나을 수 있음.


옵티마이저 실행계획

  • 오라클 8i 사용 시 집계 후 조인 수행
  • 오라클 9i 사용 시 조인 후 집계 수행
  • 오라클 10g 사용 시 두 대안의 비용을 각각 계산 후, 더 낮은 비용의 실행계획 수행

(hidden 파라미터 _complex_view_meging 또는 merge() / no_merge() 힌트를 선택 적 사용으로 원하는 수행과정을 선택 가능함)

옵티마이저 코드는 파라미터에 의해 숨겨져 있었지만 점차 진화하면서 활성화와 비용에 대한 평가도 가능해짐.


힌트 또는 옵티마이저 관련 파라미터를 확인하여 쿼리 변형이 강제적인지, 선택적인지, 비용 평가에 의한 것인지 아닌지,

     사용자가 그것을 얼마만큼 통제 할 수 있는지 알 수 있음


위지위그 (WYSIWYG)? 9 / 남송휘


  • What You See Is Not Always What You Get.(당신이 보는것은 언제나 당신이 얻는것이 아니다.)
  • 옵티마이져는 모델이 실행될때를 가정해서 실행계획은 만들고 실행엔젠이 시작되어 제시된 모델을 실행한다.
  • 하지만 실제의 동작은 언제나 제시된 모델과 일치하지는 않는다.


요약 10

/ 이태경

 
 '오라클이 왜 그렇게 수행하는가?'에 대한 답변
  • 적어도 오라클 3가지 옵티마이저 모드(all_rows, first_rows_N, first_rows)와 2가지 주요 버전(9i, 10g) 확인 필요
SQL변형
  • 단점 : 비용 산정을 하기 전에 실행 계획이 쿼리 변형에 의해 배제될 수 있다.
  • 장점 : 옵티마이저 수행의 95% 정도는 정확하게 묘사 가능
  •  

    테스트 스크립트 10

    / 이태경
     

    Complex View Merging
    Example 1: View with a GROUP BY Clause

    The view avg_salary_view contains the average salaries for each department:

    CREATE VIEW avg_salary_view AS 
      SELECT deptno, AVG(sal) AS avg_sal_dept 
        FROM emp 
        GROUP BY deptno;

    If complex view merging is enabled, then the optimizer can transform the following query, which finds the average salaries of departments in London:

    SELECT dept.loc, avg_sal_dept 
      FROM dept, avg_salary_view 
      WHERE dept.deptno = avg_salary_view.deptno 
        AND dept.loc = 'London'; 
    

    into the following query:

    SELECT dept.loc, AVG(sal) 
      FROM dept, emp 
      WHERE dept.deptno = emp.deptno 
        AND dept.loc = 'London' 
      GROUP BY dept.rowid, dept.loc; 
    

    The transformed query accesses the view's base table, selecting only the rows of employees who work in London and grouping them by department.



      본자료는 durinuri.com 의 비용기반의 오라클원리 스터디 결과로 만들어진자료입니다.

      자료를 사용하실경우 출처를 밝혀주시기바립니다. ^^