피드로 돌아가기
Dev.toDatabase
원문 읽기
Stale Statistics 해결을 통한 GBase 8a Full Table Scan 방지 및 쿼리 최적화
When GBase 8a Execution Plans Go Wrong: Mastering Statistics Management
AI 요약
Context
GBase 8a Optimizer가 오래된 Statistics 정보를 기반으로 Cost를 잘못 추정하여 최적의 실행 계획을 수립하지 못하는 문제 발생. 특히 Cardinality 오차로 인해 Index Scan 대신 Full Table Scan이 선택되며 시스템 성능 저하 유발.
Technical Solution
- Table, Column, Block의 3계층 Statistics 구조를 통한 비용 기반 Optimizer(CBO) 정밀도 향상
- Cardinality 50% 이상 편차 발생 시 ANALYZE TABLE을 통한 통계 정보 강제 갱신으로 실행 계획 교정
- Partition Key에 함수 적용을 배제하는 SQL Rewriting을 통한 Partition Pruning 활성화
- 대규모 Table JOIN 시 Full Shuffle 부하를 줄이기 위한 BROADCAST Hint 적용으로 데이터 전송 최적화
- 정기적인 Off-peak 시간대 ANALYZE 자동화 스크립트 구축으로 통계 정보 최신성 유지
- STRAIGHT_JOIN 및 PARALLEL Hint를 활용한 Optimizer의 잘못된 Join Order 및 병렬도 강제 제어
실천 포인트
- Bulk Load 및 Partition 변경 직후 ANALYZE 수행 여부 확인 - EXPLAIN 결과 내 type: ALL 및 key: NULL 필드 집중 모니터링 - Partition Key 조건절에 함수 사용 여부 검토 및 Range 조건으로 변경 - table_rows와 실제 COUNT(*) 간 30% 이상 편차 발생 시 알림 설정 - Hint 사용 전 Statistics 갱신 및 SQL Rewriting 우선 적용