새로 쓴, 대용량 데이터베이스 솔루션 vol.1을 공부하며 여기에 정리해본다.
사실 옵티마이저는 다루기 민감한 부분이며, 과연 살면서 옵티마이저 모드를 바꿀 기회를 만날 수 있을는지 알 수 없다. 그래도 이런 것도 있다는 것을 어렴풋이 아는 정도만 되어도 도움이 될 것 같다.
옵티마이저
- 통계 정보 관리가 중요
ü 실제 사용하는 도중에 만들어진 통계 정보를 사용할 수 있도록 설정
ü 야간/주간에 따라 다른 성향으로 DB를 사용하는 경우 이 시간대에 따라 별도로 저장한 통계정보를 제공하여 실행계획을 다르게 적용할 수 있다.(ex 야간 – 배치, 주간 – OLTP)
- 옵티마이저 모드
ü FIRST_ROWS : 초기 옵티마이저인 경험적 방법을 비용 기준에 적용할 수 있는 모드, 기존에 사용하던 것을 더욱 최적화 시키는 경우에 사용
ü FIRST_ROWS_n : 비용기준 최적화 방법, 새로 구축하는 경우에 적당
ü ALL_ROWS : 비용기준 최적화 방법, OLAP에 적당
ü 옵티마이저 모드를 운영 중에 바꾸는 것은 굉장히 위험
옵티마이저 모드의 파라미터
- CURSOR_SHARING
ü EXACT(default), SIMILAR, FORCE
ü 이 파라미터는 조건절의 상수값들을 변수로 전환시켜 파싱 할 수 있게 한다. 즉 기본 옵션인 EXACT의 경우 조건절의 상수가 대소문자만 변경되어도 실행계획을 다시 만든다.
ü EXACT : 조건절의 상수값이 미묘하게 변경되어도 실행계획을 다시 만들어야 한다면 이를 사용
ü SIMILAR : 조건절의 상수값이 바뀌어도 같은 실행계획을 공유하겠다면 사용
- 권장 옵션
ü CURSOR_SHARING : 기본값인 EXACT를 유지하다가 문제가 발생하는 세션에 대해서만 SIMILAR 등을 적용하여 문제를 해결한다.
ü 물론 다른 파라미터도 같은 방식으로 옵션을 변경/적용하는 것이 좋다.
- 동적 표본화(Dynamic Sampling)
ü 통계 정보가 생성되지 않은 경우 SQL이 실행될 때 마다 표본을 추출하여 통계를 만들고 이를 이용하여 실행계획을 만드는 방법이다.
ü 매 쿼리마다 표본을 추출하므로 빈번한 쿼리나 결과가 작은 경우는 비추~