SQL_OPTIMIZER

승주😊·2021년 3월 14일
0

SQL

목록 보기
4/6
post-thumbnail
post-custom-banner

옵티마이저와 실행계획

실행계획

  • sql에서 요구한 사항을 처리하기 위한 절차와 방법을 의미
  • SQL 실행계획이 달라진다해도 결과값은 바뀌지 않는다.
  • 최적화 정보는 실행 계획의 단계별 예상 비용을 표시한 것이다.
  • 실행 계획은 액세스 기법, 조인 순서, 조인 방법 등으로 구성된다.

SQL 처리 흐름도

  • 실행 계획을 시각화한것이다.
  • SQL문의 처리 절차를 시각저긍로 표현한 것이다.
  • 인덱스 스캔 및 전체 테이블 스캔 등의 액세스 기법을 표현할 수 있다.
  • 성능적인 측면의 표현을 고렿나다. (일량적 측면의 표현과 인덱스 스캔 또는 테이블 스캔 등을 표현 가능)

옵티마이저

  • 옵티마이저는 sql의 실행 계획을 수립하고 sql을 실행하는 데이터베이스 관리 시스템의 소프트웨어!
  • 사용자가 질의한 sql문에 대해 최적의 실행방법을 결정하는 역할을 수행

옵티마이저의 특징

1. 비용 기반 옵티마이저

  • 데이터 딕셔너리에 있는 오브젝트 통계, 시스템 통계 등의 정보를 사용해서 예상되는 비용을 산정한다.
  • 여러 개의 실행계획 중 최저 비용을 가지고 있는 계획을 선택해서 sql을 실행한다.

2. 규칙 기반 옵티마이저

  • 우선 순위를 가지고 실행계획을 생성한다.
  • 우선 순위가 높은 규칙이 적은 일량으로 해당 작업을 수행한다고 판단 (적은 일량 = 높은 우선순위)
  • 인덱스의 유무와 sql문에서 참조하는 객체 등을 참고하여 판단

옵티마이저의 필요성

  • sql 개발자가 작성한 sql문을 어떻게 실행하느냐에 따라 성능이 달라진다

    Ex ) emp 테이블을 먼저 읽느냐, dept 테이블을 먼저 읽느냐에 따라 비교횟수 차이가 발생 ( 성능 차이 발생 )

옵티마이저의 실행 방법

  • 개발자가 SQL 실행 -> 파싱(문법 검사, 구문 분석) -> 규칙기반 또는 비용기반 실행 계획 수립 -> SQL 실행 / 데이터 인출 (Fetch)

옵티마이저의 실행 계획 확인

  • 옵티마이저는 sql실행 계획을 PLAN_TABLE에 저장한다! (개발자가 확인 가능)

옵티마이저 종류

  • 옵티마이저 엔진
옵티마이저설명
Parsersql문장의 각 요소를 파싱해서 파싱트리 생성 (문법 검사, 구문 분석)
Query Transformersql문을 효율적으로 실행하기 위해 더 일반적이고 표준적 형태로 변환
Estimator통계정보를 사용해서 sql 실행비용 계산
Plan Generatorsql 실행 계획들을 수립
Row-Source Generator옵티마이저가 생성한 계획을 sql engine이 실행 가능한 코드로 포맷
Sql Enginesql 실행

규칙 기반 옵티마이저

  • 실행 계획을 수립할 때 15개의 우선순위를 기준으로 삼는다!
  • 최신 oracle 버전은 규칙 기반 옵티마이저보다 비용 기반 옵티마이저를 사용
우선순위설명
1Rowid를 사용한 단일 행인 경우
2클러스터 조인에 의한 단일 행인 경우
3유일하거나 기본키를 가진 해시 클러스터 키에 의한 단일 행인 경우
4유일하거나 기본키에 의한 단일 행인 경우
5클러스터 조인인 경우
6해시 클러스터 조인인 경우
7인덱스 클러스터 키인 경우
8복합 칼럼 인덱스인 경우
9단일 칼럼 인덱스인 경우
10인덱스가 구성된 칼럼에서 제한된 범위를 검색하는 경우
11인덱스가 구성된 칼럼에서 무제한 범위를 검색하는 경우
12정렬-병합 조인인 경우
13인덱스가 구성된 칼럼에서 max 또는 min을 구하는 경우
14인덱스가 구성된 칼럼에서 order by 하는 경우
15전체 테이블을 스캔하는 경우

규칙기반 옵티마이저에서 1순위인 rowid 조회 예시 -> select * from emp where rowid='aa';

비용 기반 옵티마이저

  • 오브젝트 통계 및 시스템 통계를 사용해서 총 비용을 계산
  • sql문을 실행하기 위해 예상되는 소요시간 혹은 자원의 사용량을 총 비용으로 봄
  • 총비용이 적은 쪽으로 실행 계획 수립 ( 단, 통계정보가 부적절한 경우 성능 저하 발생할 가능성 있음 )
profile
All the Best❤
post-custom-banner

0개의 댓글