728x90
반응형
개요
RBO(Rule-Based Optimizer)와 CBO(Cost-Based Optimizer)는 데이터베이스 관리 시스템(DBMS)에서 SQL 실행 계획을 수립할 때 사용하는 두 가지 대표적인 옵티마이저 방식입니다. 쿼리 성능에 중대한 영향을 미치는 이 두 방식은 시대 흐름에 따라 CBO 중심으로 발전해 왔으며, DB 성능 튜닝 및 SQL 최적화에 있어 중요한 이해 포인트입니다. 이 글에서는 RBO와 CBO의 개념, 비교, 작동 원리, 활용 전략 등을 상세히 다룹니다.
1. 개념 및 정의
구분 | 설명 |
RBO (Rule-Based Optimizer) | 미리 정해진 규칙(rule)에 따라 SQL 실행 계획을 결정하는 방식 |
CBO (Cost-Based Optimizer) | 통계 정보와 비용(cost)을 기반으로 최적의 실행 계획을 선택하는 방식 |
- RBO: 간단하고 예측 가능하지만, 상황 변화에 둔감
- CBO: 복잡하지만 다양한 실행 경로를 비교 분석해 더 나은 성능 제공 가능
2. 주요 차이점 비교
항목 | RBO | CBO |
기준 | 정해진 규칙 | 비용 기반 (통계, 리소스 소비량 등) |
유연성 | 낮음 | 높음 |
실행 계획 수립 | 고정 우선순위 기반 | 다양한 후보 중 최적 선택 |
통계 활용 | 사용하지 않음 | 테이블/인덱스 통계 적극 활용 |
최신 DBMS 지원 | 거의 없음 | 대부분의 현대 DBMS에서 기본 적용 |
RBO는 구버전 DB에 남아있는 방식이며, CBO는 최신 쿼리 최적화의 핵심입니다.
3. 작동 방식
단계 | RBO | CBO |
1 | SQL 문 분석 | SQL 문 분석 |
2 | 규칙 적용 (e.g., 인덱스 우선) | 통계 수집 (e.g., cardinality, selectivity) |
3 | 우선순위 기반 실행 계획 수립 | 후보 실행 계획 생성 및 비용 계산 |
4 | 고정된 우선순위 실행 | 가장 비용이 낮은 실행 계획 선택 |
CBO는 옵티마이저 통계의 품질에 따라 실행 계획의 품질도 달라집니다.
4. 실무 활용 전략
전략 | 설명 | 팁 |
옵티마이저 통계 갱신 | CBO 성능 극대화 핵심 요소 | 주기적 분석 권장 (ANALYZE TABLE 등) |
힌트 사용 | RBO처럼 의도한 실행 경로 유도 가능 | /*+ INDEX(table col) */ 등 활용 |
실행 계획 확인 | EXPLAIN PLAN, AUTOTRACE로 확인 | 예상과 다를 경우 통계 또는 힌트 조정 |
DBMS 설정 확인 | DB 옵티마이저 모드 확인 및 설정 변경 | Oracle의 경우 OPTIMIZER_MODE 파라미터 활용 |
현대 환경에서는 대부분 CBO 기반이며, 성능 이슈는 통계/쿼리 튜닝이 중심입니다.
5. 활용 예시 및 적용 사례
분야 | RBO 적용 예시 | CBO 적용 예시 |
레거시 시스템 | Oracle 8 이전 시스템에서 고정 실행 계획 사용 | 최신 Oracle, PostgreSQL, SQL Server 등에서 비용 기반 최적화 |
배치 처리 | 규칙 기반으로 반복 쿼리 처리 | 대용량 테이블의 조인 순서/인덱스 선택 최적화 |
분석 쿼리 | 고정된 인덱스 우선 전략 | 통계 기반으로 효율적인 GROUP BY/AGG 선택 |
CBO는 복잡한 쿼리 구조와 다양한 데이터 양에 효과적으로 대응할 수 있습니다.
6. 결론
RBO와 CBO는 데이터베이스 쿼리 성능을 결정짓는 핵심 옵티마이저 전략입니다. RBO는 간단하지만 유연성이 부족하고, CBO는 통계 기반으로 유동적인 실행 계획을 제시할 수 있습니다. 현재 대부분의 DBMS는 CBO를 중심으로 진화하고 있으며, DB 성능 최적화를 위해서는 CBO 통계 관리와 쿼리 튜닝 역량이 필수입니다.
728x90
반응형
'Topic' 카테고리의 다른 글
SQL 처리 과정(SQL Processing Steps) (0) | 2025.04.20 |
---|---|
옵티마이저(Optimizer) (0) | 2025.04.20 |
DMBOK(Data Management Body of Knowledge) (0) | 2025.04.20 |
SNA(Social Network Analysis) (1) | 2025.04.20 |
데이터 임퓨테이션(Data Imputation) (0) | 2025.04.20 |