SQL 처리 과정


Fig. SQL 처리 단계



【예제】 emp_new테이블에 24522건 삽입하기 : 첫 번째 parse call 에서 hard parsing 수행


SQL> insert into emp_new select * from patient where coh_no='019';

24522 rows created.

Elapsed: 00:00:01.34

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.08       0.16          1          1          0           0
Execute      1      0.76       1.03       3830       5174      11390       24522
Fetch        0      0.00       0.00          0          0          0           0
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        2      0.85       1.19       3831       5175      11390       24522

Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 62  (NEWNC01)

Rows     Execution Plan
-------  ---------------------------------------------------
      0  INSERT STATEMENT   MODE: ALL_ROWS
  24522   TABLE ACCESS   MODE: ANALYZED (FULL) OF 'PATIENT' (TABLE)

I. SQL Parsing

1. SQL Parser의 역할

  1. SQL 문 ⇒ SQL Parser : SQL 문장의 분석하고 parsing(tokenize)해서 parsing tree 생성
    • SQL 문장 분석 : SQL 문법 오류 확인
  2. semantic 확인 : 존재하지 않거나 권한 없는 object 사용 혹은 존재하지 않은 컬럼 참조 등 확인
  3. SQL cursor가 shared pool에 caching되어 있는지 여부 확인
    1. 해싱 알고리즘 사용
    2. parsing 요청한 사용자, optimizer 관련 파라미터 설정 등 확인 ⇒ 하나라도 다르면 새로운 SQL cursor 생성
    • shared pool에서 정확히 일치하는 SQL cursor를 찾은 경우 : 실행단계
    • shared pool에서 매칭되는 SQL문을 못 찾았거나 새로운 SQL cursor 생성 : SQL Optimization 단계

II. Optimization

1. Query Transformation(쿼리 변환기)

  1. 사용자가 던진 SQL문을 최적화하기 쉬운 형태로 변환 수행
  2. 쿼리 변환 전후 결과가 동일할 경우에만 수행

2. Plan Generator(실행계획 생성기)

  1. 후보군 실행계획 생성

3. Estimator(비용계산기)

  1. 실행계획 전체에 대한 총 비용 계산
  2. 비용 측정 기준 : 선택도(selectivity), cardinality, 비용(cost)
    1. 선택도(selectivity) : 처리할 집합에서 해당 조건이 만족되는 row가 차지하는 비율
    2. cardinality : 판정대상이 가진 결과건수 혹은 다음단계로 들어가는 중간결과건수
    3. 비용(cost) : 실행계획상의 연산을 수행할 때 소요되는 시간비용을 상대적으로 계산한 예측치
      {info:title=예제}
      query】select * from where empno='0001';
      전제】emp 테이블의 전체 row수는 200, 그 중에서 empno='0001'인 row수는 10건
      선택도】5%
      cardinality】10 rows
      {info}
  3. 예상치
    1. 목적 : 각 단계를 수행하는데 필요한 I/O, CPU, 메모리 사용량 등을 예측
    2. object 통계정보, 하드웨적인 시스템 성능 통계정보(CPU 속도, Single blcok read time, multiblock read time 등) 이용
    3. object 혹은 시스템 통계정보는 오라클이 자동 수집 혹은 정책에 따라 주기적으로 수집됨
  4. 최적화 소요 시간 단축 전략
    1. Adaptive search strategy : 예상 쿼리 수행 시간과 쿼리 최적화에 소요되는 시간이 일정비율을 넘지 않도록 적응적 탐색 전략 사용
    2. Multiple Initial orderings heuristic : 조인 순서는 최적의 실행계획을 발견할 가능성이 높은 순서대로 비용 산정해서 평가

III. Row-Source Generation

  1. 역할 : 생성된 실행계획을 실행 가능한 코드 또는 프로시저 형태로 포맷팅하는 작업을 담당
  2. Row-Source : 사용자가 요구한 최종 결과집합을 실제적으로 생성하는데 사용되는 제어 구조

참고 문서