사용자 도구

사이트 도구


study:oracle:datadb:2week_1:chap3

문서의 이전 판입니다!


제 3장 SQL의 실행계획

옵티마이져의 최적화 절차

  1. 최초에 사용자가 실행한 SQL은 Data Dictionary를 참조하여 Parsing을 수행한다.
  2. Optimizer는 파싱결과를 이용해 논리적으로 적용 가능한 실행계획 형태를 선택하고
    힌트를 감안하여 일차적으로 잠정적인 실행계획들을 생성한다
  3. Data Dictionary의 통계정보(데이타 분포도,테이블 저장구조, 인덱스 구조, 파티션 행태, 비교연산자 등)을 감안하여
    각 실행계획의 비용을 계산한다.
  4. Optimizer는 비용이 산출된 실행계획들을 비교하여 가장 최소의 비용을 가진 실행계획을 선택한다

개요

최적화 절차 비용 산정기 실행계획 생성기

질의 변환기

정의

  • 보다 양호한 실행계획을 얻을 수 있도록
    적절한 형태로 SQL의 모양을 변환하는 것
뷰병합(View Merging)
  1. 뷰 정의 시에 지정한 쿼리(뷰쿼리)를 액세스가 수행되는 쿼리(액세스쿼리)에 병합(Merge)
  2. <color blue>수행시킨 쿼리를 기준으로 뷰에 지정한 부분만 보정하므로 뷰로 발생되는 불이익이 크게 감소</color>
  3. 액세스 쿼리의 조건들이 제 역할을 할 수 있고, 뷰 쿼리의 조건까지 추가
  4. 몇 가지 제한요소가 있어 이를 준수하지 않으면 뷰병합은 불가능
조건절 진입(Predicate Pushing)
  1. <color blue>뷰병합을 할 수 없는 경우를 대상으로 뷰쿼리 내부에 액세스쿼리의 조건절을 진입시키는 질의 변환</color>
  2. 액세스쿼리를 뷰쿼리로 진입시키는 방법
  3. 이렇게 가능한 모든 방법을 동원해서 부여 조건을 뷰쿼리 내에 최대한 반영시켜 보다 양호한 실행계획을 유도
서브쿼리 비내포화(Subquery Unnesting)
  1. <color blue>서브쿼리를 사용하는 쿼리는 종종 내포관계 해제나 조인형식으로 대체하여 보다 양호한 수행속도를 얻음</color>
  2. 실제로 대부분의 서브쿼리는 이러한 변환을 거침
  3. 서브쿼리 비내포화가 불가능하면 서브쿼리를 먼저 수행하거나 나중에 수행하는 실행계획 수립
  4. 서브쿼리가 수행되는 순서에 따라 수행속도에는 매우 큰 차이가 나타날 수 있음
Meterialized View(실체뷰)의 쿼리 재생성(Query rewrite)
  1. <color blue>M-View는 테이블과 밀접한 논리적 관계를 가진 물리적 집합이므로 최적의 집합을 처리하도록 쿼리를 재생성</color>
  2. 일종의 확장된 뷰병합 기능
  3. 상황에 따라 어떤 물리적 집합을 액세스할 것인지 고민할 필요가 없으므로 매우 유용한 기능
  4. M-View의 쿼리 재생성(Query Rewrite)은 비용기준에 의해 결정
    (테이블 액세스가 적은 비용을 가지면 쿼리 재생성 하지 않음)
OR 조건의 전개(expansion)
  1. <color blue>OR 조건이 처리주관 조건이 되면 여러 개의 단위 쿼리로 분기하고 UNION ALL로 연결하는 질의로 변환</color>
  2. 단지 체크 조건으로만 사용되는 경우에 이와 같은 전개가 발생하면 오히려 큰 비효율이 발생
  3. 옵티마이져는 비용기준에 의해 전개여부를 결정
사용자 정의바인드 변수 엿보기(Peeking)
  1. Optimizer는 쿼리 내에 사용자가 조건절에 지정한 바인드 변수가 있을 때 실제로 그 변수에 어떤 값이 들어올지 알 수 없기 때문에 통계정보를 제대로 참조할 수 없음
  2. 이런 문제를 보안하기 위해서 <color blue>최초에 수행될 때 적용되었던 값을 이용해 실행계획을 수립하고, 다음 수행부터는 공유하는 방법</color>을 이용한다.
  3. 마치 커닝과 유사한 개념
  4. 그냥 변수인 채로 실행계획을 수립하는 것보다는 유리할 수 있는 판단에서 나온 궁여지책
  5. 실제 적용상의 입장에서 보면 상당히 중요한 의미를 가짐

비용 산정기

실행계획 생성기

study/oracle/datadb/2week_1/chap3.1273728024.txt.gz · 마지막으로 수정됨: 2010/05/13 14:20 저자 starlits