일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Program
- tiles
- system developer
- classdiagram
- mybatis
- FrontController
- Cloud
- pattern
- Spring
- ERD
- getAttribute
- controller
- command
- 맥린이
- getParameter
- 프롬프트
- MVC
- HTTP
- Agile
- Framework
- backend
- 내장객체
- usecasediagram
- App
- setAttribute
- UML
- NOTE
- DevOps
- jsp
- handlerMapping
- Today
- Total
시작은 언제라도
옵티마이저 본문
-옵티마이저는 SQL을 가장 빠르고 효율적으로 수행할 최적(최저비용)의 처리 경로를 생성해주는 DBMS
내부의 핵심엔진이다.
-optimizer은 sql을 optimize해주는 역할을하는 DBMS 내부 핵심 엔진.
-옵티마이저가 생성한 처리경로를 실행 계획이라고 한다. (execution plan)
- sql 최적화(optimize)과정 :
1.쿼리 수행을 위해 후보군이 될만한 실행 계획을 검색
2.데이터 딕셔너리에 미리 수집한 오브젝트 통계 및 시스템 통계정보를 이용해 각 실행계획의 처리 비용을 산정
3.각 실행 계획을 비교, 최저비용을 갖는 경로를 선택
-옵티마이저 종류
1. 규칙기반 옵티마이저
Rule-Based Optimizer
미리 정해놓은 규칙에 따라 엑세스 경로를 평가하고 실행 계획 선택
2. 비용기반 옵티마이저
Cost-Based Optimizer
여러 통계정보를 기초로 단계 별 예상 비용 산정 , 합산한 총비용이 가장 낮은 계획을 선택
(레코드 갯수, 블록 개수, 평균 행 길이, 칼럼 값의 수, 칼럼 값 분포, 인덱스 높이, 클터스터링 팩터 등을 고려)
3. 스스로 학습하는 옵티마이저
Self-Learning Optimizer
예상치와 런타임 수행 결과를 비교하고 실행 계획을 스스로 조정
-sql최적화 과정에 작용하는 서브 엔진
parser : SQL 문장을 이루는 개별 요소를 분석하고 파싱해서 파싱트리를 생성 이 과정에서 Syntex, Sematic check가 이루어짐 (문법검사, 구문분석)
optimizer :
Query Transformer : sql문을 효율적으로 실행하기 위해 옵티마이저가 쿼리의 형태를 변환
estimator : 통계정보를 통해 sql 실행 비용을 계산
plan generator : (sql 실행 계획 수립)
row-source generator : 옵티마이저가 생성한 실행계획을 SQL 엔진이 실행할 수 있는 코드 형태로 변환 (데이터 변환)
sql engine : SQL을 실행
-why 최적화?
전체 처리속도의 최적화
최초 응답속도의 최적화
-실행 계획 확인 법
옵티마이저의 sql 실행 계획은 PLAN_TABLE에 저장됨. 이를 조회해서 확인 가능
개발자가 SQL을 실행하면 파싱 과정(문법 검사, 구문 분석)을 거쳐 옵티마이저가 규칙 기반 혹은 비용 기반으로 실행 계획을 수립하는데 Oracle은 기본적으로 비용 기반 옵티마이저를 사용한다.
실행 계획 수립이 완료되면 SQL을 실행하고 데이터를 인출한다
-인덱스를 써서 데이터 빠르게 조회 가능, 하지만 인덱스도 자원이기 때문에 무조건 만들어 쓴다고 좋지 않다. 데이터베이스에 부하를 주기 때문