쿼리 수행경로
일반쿼리 > Update,Delete일경우 > Parser > Optimizer > Excutor > QueryCache
> Select일경우 > QueryCache > Parser
mysql_prepared_statment > Optimizer
> Select일경우 > QueryCache > Parser
mysql_prepared_statment > Optimizer
- Parser는 질의를 바이너리형태로 변경해서 Optimizer에 전달
- Prepared는 QueryCache를 현재는 사용하지 않음.
- Prepared는 10%정도의 성능향상이 있으나 Select에서 캐쉬를 이용하지 않으므로 업데이트나 입력이 많을때만 사용
- Executor은 Having, Order By, Group By, Limit 등의 존재여부에 따라 공간 할당
- 처리된 결과는 QueryCache에 저장됨
옵티마이저란?
- 가장 빠른 길을 찾아가는 네비게이션
- MySQL은 Cost-Based(비용기반)사용. 예전 DB들은 Rule_Based(룰기반)를 사용
- 옵티마이저는 항상 최적의 답을 찾는것은 아님
- 질의문의 Logic Fomula를 Data statistics와 Metadata를 참고해서 최적의 방법을 도출
비용기반 옵티마이져
- 비용이란것은 디스크 엑세스라고 볼수 있음
- 비용의 단위 = 페이지(4Kbyte) 단위, 랜덤한 읽기
- 비용계산을 위한 데이터 통계 : 데이터의 수, 데이터의 카디널리티, 키분포도, row와 key의 길이
- 비용계산을 위한 스키마의 요소 - 유니크, Null유무
옵티마이저 진단 및 튜닝
- 사용하는 통계데이터의 업데이트는 자동으로 처리함
- 유저가 수동업데이트 할때는 "Analyze Table" 커맨드 사용
- 정기적으로 실행(단 대용량에서는 ReadLock이 걸리므로 사용주의가 필요)
- MyISAM, InnoDB, BDB에서 사용가능
댓글 없음:
댓글 쓰기