Data Base/DB Tunning
[SQL] 튜닝 - 옵티마이저🔥
woochii
2023. 8. 22. 14:52
728x90
반응형
통계 정보와 비용 계산 원리
선택도와 카디널리티
선택도 : 전체 레코드 중에서 조건절에 의해 선택되는 레코드 비율
선택도 = 1 / NDV 📍NDV (Number of Distinct Values) = 컬럼 값 종류 개수
카디털리티 : 전체 레코드 중에서 조건절에 의해 선택되는 레코드 개수
카디널리티 = 총 로우 수 X 선택도 = 총 로우 수 / NDV
통계정보
- 오브젝트 통계
- 테이블 통계
- 인덱스 통계
- 컬럼 통계
- 시스템 통계
시스템 통계는 애플리케이션 및 하드웨어 성능 특성을 측정한 것이며, 아래 항목들을 포함한다.
- CPU 속도
- 평균적인 Single Block I/O 속도
- 평균적인 Multiblock I/O 속도
- 평균적인 Multiblock I/O 개수
- I/O 서브시스템의 최대 처리량
- 병렬 Slave의 평균적인 처리량
옵티마이저에 대한 이해
규칙 기반(Rule-Based) 옵티마이저 (RBO)
데이터 특성을 나타내는 통계정보를 활용하지 않고 단순 규칙에만 의존. 따라서 대량 데이터를 처리하는데 부적합하다. (잘 안쓰임)
비용 기반(Cost-Based) 옵티마이저 (CBO)
데이터 딕셔너리에 미리 수집해 둔 통계정보를 이용해 예상 비용을 산정하고, 그 중 가장 낮은 비용의 실행 계획 하나를 선택한다.
옵티마이저 모드
비용 기반 옵티마이저에는 최적화 목표를 설정하는 기능이 있다.
- ALL_ROWS : 전체 처리속도 최적화
- FISRT_ROWS : 최초 응답속도 최적화
- FIRST_ROWS_N : 최초 N건 응답속도 최적화
옵티마이저의 한계
같은 SQL인데도 DBMS에 따라, 버전에 따라 옵티마이저가 다른 실행계획을 생성한다.
그 선택이 항상 최선이 아님을 짐작할 수 있다.
기본적으로 비용 기반으로 작동하지만, 어느쪽이 나은지 판단하기 애매할 때 사용하는 가정과 규칙들이 현실과 맞지 않을 수 있다.
SQL최적화 기법이 많이 좋아졌고 발전하는 중이지만 옵티마이저는 불완전할 수밖에 없다.
개발자의 역할
- 필요한 최소 블록만 읽도록 쿼리를 작성한다.
- 최적의 옵티마이징 팩터를 제공한다.
- 필요하다면, 옵티마이저 힌트를 사용해 최적의 액세스 경로로 유도한다.
728x90
반응형