오라클 데이터베이스에서 통계정보(Statistics) 갱신은 쿼리 최적화를 위해 매우 중요한 작업입니다. 통계정보가 최신 상태가 아닐 경우, 옵티마이저(Optimizer)가 비효율적인 실행 계획을 선택하여 성능이 저하될 수 있습니다. 갱신이 필요한 주요 이유는 다음과 같습니다
개요
1. 데이터 분포 변경
• 테이블에 대량의 데이터가 추가, 수정, 삭제되면 기존의 통계정보가 실제 데이터와 일치하지 않을 수 있습니다.
• 인덱스가 재구성되거나 새로운 데이터 패턴이 생길 경우도 마찬가지입니다.
2. 쿼리 실행 계획 최적화
• 오라클 옵티마이저는 통계정보를 기반으로 실행 계획을 수립합니다.
• 잘못된 통계정보가 있으면 잘못된 인덱스 사용, 풀 테이블 스캔 증가, 조인 방식 오류 등의 문제가 발생할 수 있습니다.
3. Bind Variable과 Adaptive Optimization 지원
• 바인드 변수를 사용하는 경우, 최신 통계정보가 없다면 잘못된 실행 계획이 고정될 가능성이 높습니다.
• Oracle 12c 이상에서는 Adaptive Query Optimization을 통해 실행 계획을 동적으로 변경할 수 있지만, 통계정보가 최신이어야 효과적입니다.
4. Histogram 및 Extended Statistics 활용
• 히스토그램(Histogram) 정보를 통해 데이터 값의 불균형을 파악하여 인덱스 활용을 최적화할 수 있습니다.
• 조인에 사용되는 여러 컬럼의 상관관계(Extended Statistics) 를 업데이트하면 옵티마이저가 더 나은 실행 계획을 선택할 수 있습니다.
통계정보 갱신 방법
1. 특정 테이블만 갱신
EXEC DBMS_STATS.GATHER_TABLE_STATS('SCHEMA_NAME', 'TABLE_NAME');
2. 특정 인덱스만 갱신
EXEC DBMS_STATS.GATHER_INDEX_STATS('SCHEMA_NAME', 'INDEX_NAME');
3. 전체 스키마 갱신
EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SCHEMA_NAME');
4. 전체 데이터베이스 갱신
EXEC DBMS_STATS.GATHER_DATABASE_STATS;
5. AUTO 옵션 활용 (변경된 부분만 갱신)
EXEC DBMS_STATS.GATHER_DATABASE_STATS(options => 'GATHER AUTO');
통계정보 갱신 주기
• 대량의 DML(INSERT, UPDATE, DELETE)이 발생한 후
• 배치 작업 또는 대규모 데이터 적재 이후
• 주기적으로(예: 매일 새벽 또는 주말 배치 수행 시)
→ Oracle 자동 통계 수집 기능(AUTO_TASK, GATHER AUTO) 을 활용할 수도 있음.
주의사항
1. 실시간 운영 환경에서는 신중하게 수행해야 함
• GATHER_DATABASE_STATS 같은 명령어는 시간이 오래 걸릴 수 있으므로 배치 시간에 수행하는 것이 좋음.
• 일부 테이블에 대해서만 GATHER_TABLE_STATS를 수행하는 것이 더 효율적일 수도 있음.
2. 히스토그램 사용 시 주의
• 데이터 패턴이 자주 변하지 않는 경우 히스토그램이 오히려 실행 계획을 불안정하게 만들 수도 있음.
3. 수집된 통계정보 백업 가능
• 기존 통계정보를 보존하고 싶다면, 백업 후 갱신하는 것이 좋음
관련 블로그
오라클 실행계획과 통계정보 백업
오라클(Oracle) 데이터베이스에서 실행계획(Execution Plan)과 통계정보(Statistics)를 백업하는 방법은 아래와 같이 정리할 수 있습니다.1. 실행계획(Execution Plan) 백업오라클에서 실행계획을 백업하는 방
make2t.tistory.com
실행계획이 갑자기 변경되는 이유
오라클 데이터베이스에서 SQL 실행 계획이 갑자기 변경되는 원인은 여러 가지가 있을 수 있습니다. 다음은 그 주요 원인들입니다:통계 정보 변경: 오라클 옵티마이저는 테이블 및 인덱스에 대한
make2t.tistory.com
인덱스 통계 갱신의 목적과 효과
1. 인덱스 통계 갱신의 목적(1) 정확한 데이터 통계 수집데이터베이스는 옵티마이저(Optimizer)가 쿼리 실행 계획을 생성할 때, 테이블과 인덱스의 통계 정보를 참조합니다.인덱스 통계는 인덱스의
make2t.tistory.com
'IT > Oracle' 카테고리의 다른 글
PL/SQL Function 기본 구조 (0) | 2025.02.23 |
---|---|
오라클 파티션 인덱스 상태 조회 쿼리 (0) | 2025.02.23 |
오라클 특정 파티션 내 데이터 조회 (0) | 2025.02.23 |
Oracle 19c의 기능 (1) | 2025.02.23 |
오라클 파티션 리빌드(Rebuild) 쿼리 (0) | 2025.02.23 |