[검색] 공부하기/자격증

SQLD 옵티마이저와 실행계획 (DB 내부의 동작흐름)

Ben의 프로그램 2023. 9. 6. 18:10
728x90

출처 : https://www.youtube.com/watch?v=o8ArmTaIp9w 

 

옵티마이저란?
옵티마이저는 DB 내부의 핵심 엔진이다. SQL을 어떻게 실행할지 결정하는 두뇌라고 생각할 수 있습니다. 실행 계획이라는 것이 생성되는데, 실행 계획이라는 것은 옵티이저가 알아낸 실행 방식을 의미합니다. 실행 계획은 실행 SQL과 함께 캐시 메모리에 저장이 됩니다. 이 엔진이 내부에서 SQL 을 마주했을 때 처리하는 과정에 대해서 알아보겠습니다. 

 

옵티마이저의 처리과정
1) Parser
SQL 이 들어왔을 때 처음 동작하는 친구이다. SQL의 문법적 혹은 의미적 오류가 있는지 확인합니다. 그리고 나서 SQL과 실행계획이 캐시 메모리에 이미 존재하는지 확인합니다. 이미 저장되어 있다면 또 생성할 필요가 없기 때문입니다. 그래서 캐시 메모리에 실행계획과 SQL이 존재한다면 바로 실행을 시켜줍니다. 이것을 '소프트 파싱'이라고 부릅니다. 근데 만약 캐시 메모리에 없다면, SQL 의 실행계획을 찾아야 하기 때문에 2단계가 실행됩니다. 

2) Optimizer
우선 Query Transformer(쿼리 변환기)를 거치게 됩니다. 최적화 하기 쉽게 SQL을 변환 시키려는 시도를 하게 됩니다. 예를 들어 두 테이블을 조인하는 SQL이 있다고 했을 때 그러면 어느 테이블을 먼저 스캔해야할지 형태변환을 하면서 판단을 하게 됩니다. 그리고 나서 Estimator 가 실행되는데, 실행계획에 대한 전체 비용계산을 하게 됩니다. SQL이 실행될 때 i/o, cpu, 메모리, 테이블 및 인덱스 통계 정보를 확인합니다. 이렇게 확인한 정보들을 마탕으로 Plan Generator 가 실행되어, 실행 계획을 세우게 됩니다. 

3) Row-Source Generator
실제 실행할 수 있는 코드 형태로 포맷팅이 진행됩니다. 

4) SQL Engine 
SQL이 최종적으로 실행됩니다.

 

옵티마이저의 유형
옵티마이저는 규칙 기반과 비용 기반이 있다. 비용 기반이 좀 더 똑똑한 친구이다. 규칙 기반은 우선순위가 높은 규칙을 토대로 SQL 을 실행시킵니다. 반면에 비용 기반은 통계 정보를 기반으로 좀 더 세세하게 계산을 해서 SQL을 동작시키게 됩니다. 

 

 

'[검색] 공부하기 > 자격증' 카테고리의 다른 글

SQLD 인덱스 종류  (0) 2023.09.06
SQLD Window 함수에서의 Group by 와 Partition  (0) 2023.09.06
AWS 자격증 CLF-001 ~ 002  (0) 2023.08.30