티스토리 뷰
[Oracle] Rule-Based-Optimizer vs Cost-Based-Optimizer
oh-yes 2014. 7. 21. 17:231. RBO의 실행계획 결정원리와 예외 조건들에 대해 설명하시오.
RBO 내장규칙 | FROM절에서의 테이블 위치 |
WHERE절에서의 순서변경 | INDEX 생성 및 삭제 |
- 우선 순위가 빠른 인덱스를 선정함.
- 우선 순위가 같고 동등(Equal) 조건에 의한 검색은 인덱스가 모두 사용됨.
- 우선 순위가 같지만 동등조건이 아닌 경우, 나중에 생성된 인덱스를 사용함.
- 같은 칼럼에 대한 검색 조건 중, 조건이 함수 등에 의해 변형되면 둘 중
나쁜 실행계획이 선택되어 실행됨.
- AND. OR 조건에서 우선 순위를 결정
(AND는 조건절에서 정방향으로 조건을 읽음 / OR는 조건절에서 역방향으로)
2. CBO의 문제점에 대해 설명하고 그 대처 방안에 대해 설명하시오.
- 통계가 있는지 없는지에 대한 유무가 중요함
1. (SELECT TABLE_NAME, LAST_ANALYZED FROM USER_TABLES) 등의 쿼리를 통하여
날짜 정보가 있으면 통계정보가 존재, 없으면 통계정보가 없음.
2. DBMS_STATS를 활용하여 통계정보에 대한 BACKUP / RECOVERY 가능
(DBMS_STATS + DBMS_JOB을 동시에 사용)
3. 최신의 통계정보를 기반으로 하는 것이 원칙이나, 반드시 최신의 통계정보가
우수한 성능을 보장하는 것이 아님(데이터 분포도 관련 문제)
=> 부정확한 통계정보를 기반으로 한 CBO는 성능상 효율이 떨어짐
이러한 현상은 골고루 분산되어 있는 데이터라는 전제 때문에 발생함.
1. 히스토그램(HISTOGRAM)을 통하여 DISTINCT-KEY의 수를 지정하는 등의 방법을 사용
2. 힌트(Hint)설정을 통하여 사용자가 파악한 최적의 실행계획을 수행하도록 SQL문 작성
STOURED OUTLINE을 활용하여 RBO/CBO 모두 튜닝 시
실행계획을 재사용하는 방법도 있음.
'Programing > Database & SQL' 카테고리의 다른 글
[Oracle] 결합 컬럼 인덱스 / 조인(Join)문의 종류와 성능 (0) | 2014.07.23 |
---|---|
SQL전문가 가이드 - join 부분 (0) | 2014.06.06 |
- Total
- Today
- Yesterday
- Til
- Spring Boot
- Prototype
- pm2
- tomcat
- springboot
- package.js
- http method
- Spring MVC
- Sublime Text 2
- WebFlux
- EJS
- 스프링
- jade
- cluster
- ecma
- Kotlin
- Spring
- Express.js
- RestTemplate
- implicit prototype chain
- maven
- Handlebars
- Sublime Text 3
- Package Control
- HttpClient
- node.js
- HTTP
- Squelize.js
- SideBarEnhancements
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |