새로 쓴, 대용량 데이터베이스 솔루션 vol.1을 공부하며 여기에 정리해본다.
사실 옵티마이저 관련해서는 이 글 제일 마지막의 문구가 가장 핵심이 아닐까 생각한다.
실행계획의 고정화
- 아우트라인(Outline)
ü 실행계획의 요약본
ü 즉 몇 가지 정해진 참조값이 같으면 고정된 실행계획을 이용하여 쿼리를 수행하도록 하는 그 몇 가지 참조값. 동일한 실행계획으로 재현할 수 있도록 도와주는 최소한의 참조 정보, 그러나 힌트와는 다르다.
ü 하나 혹은 그 이상의 SQL에 적용 가능, 그룹별(카테고리별) 적용 가능
새로운 옵티마이저의 적용
1. 최대한 오랜 기간 동안 현재 버전으로 아우트라인을 생성한다.
상황에 따라서 아우트라인을 범위(SYSTEM/SESSION...)별 및 카테고리(배치/OLTP...)별로 생성한다.
2. 아우트라인 생성 후 새로운(버전업 된) 옵티마이저를 적용하고 문제 발생 시 문제되는 SQL에 아우트라인을 적용한다.
옵티마이저의 한계
- 옵티마이저는 태생적으로 한계를 지니고 있다. 컬럼/인덱스의 데이터 분포도를 정확하게 알 수 없기 때문이다.
ü LIKE, <, >, BETWEEN 등의 조건
ü 여러 컬럼의 결합 인덱스
- 그러므로 적절한 인덱스, 클러스터링을 결정하고 높은 수준의 SQL을 구사하는 것이 더욱 중요하다.