옵티마이저 행동에 영향을 미치는 요소
- SQL과 연산자 형태
● 결과 같더라도 SQL을 어떤 형태로 작성했는지 또는 연산자를 사용했느지에 따라
옵티마이저가 다른 선택을 할 수 있고, 궁극적으로 쿼리 성능에 영향을 미친다.
- 인덱스, IOT, 클러스터링, 파티셔닝, MV 등 옵티마이징 팩터
- 제약 설정 : PK, FK, Not Null, Check
● PK 제약과 옵티마이저
예시) 서브쿼리를 Unnesting 하고서 서브쿼리 테이블 기준으로 NL 조인하려 할 때,
만약 고객 테이블에 PK 제약이 없다면 고객번호 중복을 제거한느 sort unique
오퍼레이션을 먼저 수행해야 한다.
● FK 제약과 옵티마이저
예시) 조인 제거 기능과 FK 제약이 있을 때만 작동하는 기능들이 여러 있는데,
11g에 추가된 Reference 파티셔닝도 그 중 하나다.
● Not Null 제약과 옵티마이저
예시) where 절 없이, group by 절을 사용하면 index가 있다면 index full scan 또는
index fast full scan으로 빠르게 처리할 수 있다. 하지만 이 경우 not null 제약이
있어야 하며 not null 제약이 없을 시 null 값이 입력될 가능성을 염두에 두고
실행계획을 수립해야 하므로 테이블 전체를 스캔한다.
● Check 제약과 옵티마이저
예시) check 제약이 있을 시 where 절에 조건에 따라 filter 작업이 발생하지 않는다.
파티션 뷰에서 참조하는 테이블에 check 제약을 설정하면 파티션 pruning 기능 작동
- 옵티마이저 힌트
● 옵티마이저 힌트가 제대로 작동하지 않는 경우
- 문법적으로 맞지 않게 힌트를 기술
- 잘못된 참조 사용
- 의미적으로 맞지 않게 힌트를 기술
- 논리적으로 불가능한 엑세스 경로
- 버그
● 옵티마이저 힌트에 관한 일반적인 사용 원칙은 다음과 같다.
- 가급적 힌트 사용을 자제하고, 옵티마이저가 스스로 좋은 선택을 할 수 있도록 돕는다.
- 옵티마이저가 잘못된 선택을 할 때만 힌트를 사용한다.
- 통계정보 : 오브젝트 통계, 시스템 통계
● CBO의 모든 판단 기준은 통계정보에서 나온다.
- 옵티마이저 관련 파라미터
● 만약 옵티마이저의 갑작스런 변화를 원치 않는다면 optimizer_features_enable 파라미터
를 이전 버전으로 설정하면 된다.
- DBMS 버전과 종류
'ORACLE > SQLP' 카테고리의 다른 글
성능고도화 3-4. 통계정보1 (0) | 2016.12.26 |
---|---|
성능고도화 3-3. 옵티마이저의 한계 (0) | 2016.12.26 |
성능고도화 3-1. 옵티마이저 (0) | 2016.12.26 |
성능도고화 2-8. 고급 조인 테크닉 (0) | 2016.12.26 |
성능고도화 2-7. 조인을 내포한 DML 튜닝 (0) | 2016.12.26 |