
Oracle 데이터베이스의 성능 최적화는 결국 정확한 통계 정보(statistics)에서 출발합니다. 옵티마이저(Optimizer)는 실행 계획을 결정할 때 테이블, 인덱스, 파티션 등의 통계 정보를 참조합니다. 이 통계가 오래되었거나 잘못된 경우, 실행 계획이 비효율적으로 선택되어 전체 시스템 성능이 저하될 수 있습니다. 이때 중요한 관리 뷰 중 하나가 바로 DBA_ANALYZE_OBJECTS입니다. 이 글에서는 DBA_ANALYZE_OBJECTS의 구조, 기능, 활용 사례, 그리고 실무 최적화 전략까지 전문가 관점에서 깊이 있게 다루겠습니다.
1. DBA_ANALYZE_OBJECTS란 무엇인가?
DBA_ANALYZE_OBJECTS 뷰는 Oracle 내부에서 수행되는 통계 분석(Analyze Statistics) 작업에 대한 관리 정보를 제공합니다. 이 뷰를 통해 DBA는 현재 또는 과거에 수행된 객체 통계 수집 상태, 성공/실패 여부, 분석 대상 객체의 종류 등을 파악할 수 있습니다. Oracle의 ANALYZE 명령어 또는 DBMS_STATS 패키지를 사용하여 수행된 모든 통계 수집 작업이 DBA_ANALYZE_OBJECTS를 통해 추적되므로, 데이터베이스 성능 모니터링과 통계 관리 자동화의 핵심 지표로 활용됩니다.
2. DBA_ANALYZE_OBJECTS 주요 컬럼 설명
| 컬럼명 | 데이터 타입 | 설명 |
|---|---|---|
| OWNER | VARCHAR2(30) | 분석된 객체의 소유자(스키마명) |
| OBJECT_NAME | VARCHAR2(128) | 분석 대상 객체 이름 (테이블, 인덱스, 클러스터 등) |
| OBJECT_TYPE | VARCHAR2(19) | 객체 유형 (‘TABLE’, ‘INDEX’, ‘CLUSTER’, ‘VIEW’ 등) |
| ANALYZE_MODE | VARCHAR2(10) | 분석 방식 (‘COMPUTE’, ‘ESTIMATE’, ‘DELETE’) |
| SAMPLE_SIZE | NUMBER | 샘플링 기반 분석 시 사용된 데이터 비율 |
| START_TIME | DATE | 분석 작업 시작 시각 |
| END_TIME | DATE | 분석 작업 종료 시각 |
| STATUS | VARCHAR2(10) | 분석 성공 여부 (‘SUCCESS’, ‘FAILED’, ‘IN PROGRESS’) |
| MESSAGE | VARCHAR2(4000) | 에러나 경고 메시지 내용 |
이 정보는 단순한 로그 수준의 데이터가 아니라, 분석 정확도와 시스템 부하 간 균형을 평가하는 근거로 활용됩니다.
3. DBA_ANALYZE_OBJECTS와 관련된 주요 뷰 비교
| 뷰 이름 | 기능 요약 | 주요 용도 | 연관성 |
|---|---|---|---|
| DBA_ANALYZE_OBJECTS | ANALYZE 수행 내역 및 상태 관리 | 통계 수집 상태 모니터링 | DBA 작업 로그 |
| DBA_TAB_STATISTICS | 테이블 통계 정보 저장 | 통계 기반 실행 계획 최적화 | 결과 데이터 저장 |
| DBA_IND_STATISTICS | 인덱스 통계 정보 | 인덱스 효율성 평가 | 보조 분석용 |
| DBA_OBJECTS | 전체 객체 메타데이터 관리 | 객체 상태 및 존재 여부 확인 | 객체 존재 여부 확인에 활용 |
4. ANALYZE와 DBMS_STATS의 차이
Oracle 10g 이후로는 DBMS_STATS 패키지를 이용한 통계 수집이 권장되지만, ANALYZE 명령어 역시 DBA_ANALYZE_OBJECTS를 통해 추적할 수 있습니다. 아래 표는 두 접근 방식의 주요 차이를 요약한 것입니다.
| 항목 | ANALYZE 명령 | DBMS_STATS 패키지 | 비교 요약 |
|---|---|---|---|
| 지원 버전 | Oracle 8i~ | Oracle 9i~ (권장) | DBMS_STATS가 최신 통계 수집 표준 |
| 분석 정확도 | 샘플 기반, 수동 조정 필요 | 자동 샘플링, 통계 히스토그램 지원 | DBMS_STATS가 더 정밀 |
| 자동화 지원 | 없음 (수동 스크립트 필요) | 자동 통계 갱신 기능 존재 | DBMS_STATS가 자동화에 유리 |
| 기록 관리 | DBA_ANALYZE_OBJECTS에서 조회 | DBA_OPTSTAT_OPERATIONS에서 관리 | 둘 다 모니터링 가능 |
5. DBA_ANALYZE_OBJECTS 조회 예제
SELECT OWNER, OBJECT_NAME, OBJECT_TYPE, STATUS, START_TIME, END_TIME
FROM DBA_ANALYZE_OBJECTS
WHERE START_TIME > SYSDATE - 7
ORDER BY START_TIME DESC;
이 쿼리는 최근 7일간 수행된 통계 수집 내역을 조회합니다. 이 정보를 기반으로 실패한 작업을 재수행하거나, 비정상적으로 오래 걸리는 분석을 식별할 수 있습니다.
6. 실무 적용 시나리오
① 통계 누락 탐지 및 자동 복구
DBA_ANALYZE_OBJECTS를 주기적으로 점검하면 특정 테이블 또는 인덱스의 통계 누락 상태를 빠르게 식별할 수 있습니다. 예를 들어, STATUS 컬럼이 ‘FAILED’로 표시된 항목은 DBMS_STATS.GATHER_TABLE_STATS를 이용해 재분석합니다.
② 성능 저하 원인 진단
실행 계획이 갑자기 비효율적으로 바뀌었을 때, 해당 시점의 DBA_ANALYZE_OBJECTS를 조회하면 통계 변경 이력과 일치 여부를 확인할 수 있습니다. 이를 통해 “통계 갱신 이후 성능 저하” 문제를 원인 분석 차원에서 접근할 수 있습니다.
③ 자동화 스케줄 관리
Oracle의 AUTO_TASK_STATS 또는 DBMS_SCHEDULER 작업과 연계하면, 통계 수집 작업의 성공률을 자동 보고서로 생성할 수 있습니다. 이때 DBA_ANALYZE_OBJECTS는 통계 성공률의 근거 데이터를 제공합니다.
7. 통계 관리 모범 사례
- 정기 점검: DBA_ANALYZE_OBJECTS에서 주기적으로 실패 또는 장시간 실행 건을 점검.
- 히스토그램 유지: 데이터 분포가 비균등할 경우,
METHOD_OPT => 'FOR ALL COLUMNS SIZE AUTO'옵션을 사용. - 자동화:
DBMS_STATS.AUTO_SAMPLE_SIZE를 이용해 최적 샘플링 수행. - 모니터링 대시보드 구축: DBA_ANALYZE_OBJECTS + DBA_TAB_STATISTICS 데이터를 기반으로 KPI 대시보드 구현.
8. DBA_ANALYZE_OBJECTS를 활용한 SQL 튜닝 프로세스
- 대상 테이블 또는 인덱스 식별
- DBA_ANALYZE_OBJECTS에서 마지막 통계 수행 시점 확인
- 필요 시 재수집:
EXEC DBMS_STATS.GATHER_TABLE_STATS('HR','EMPLOYEES'); - DBA_ANALYZE_OBJECTS에서 상태 확인 후, 실행 계획(EXPLAIN PLAN) 재점검
9. 결론
DBA_ANALYZE_OBJECTS는 단순한 로그 뷰가 아닌, 통계 기반 성능 관리의 핵심 모니터링 도구입니다. 이 뷰를 통해 통계 수집의 성공률, 수행 시간, 실패 원인을 정확히 파악하면 데이터베이스의 옵티마이저 품질을 향상시키고, 예측 가능한 성능을 유지할 수 있습니다. 즉, Oracle 성능 관리의 출발점은 DBA_ANALYZE_OBJECTS의 정확한 이해에서 시작된다고 해도 과언이 아닙니다.
출처
- Oracle® Database Reference 19c - DBA_ANALYZE_OBJECTS View
- Oracle® Database Performance Tuning Guide
'Database > Oracle' 카테고리의 다른 글
| [ORACLE] DBA_AUDIT_EXISTS 완벽 가이드 : 객체 존재 감사의 원리와 활용 전략 (0) | 2025.10.13 |
|---|---|
| [ORACLE] DBA_ASSOCIATIONS 완벽 가이드 : 객체 간 관계를 관리하는 데이터베이스의 숨은 핵심 (0) | 2025.10.13 |
| [ORACLE] DBA_ALL_TABLES 완벽 가이드 : 오라클 테이블 구조의 핵심 이해 (0) | 2025.10.13 |
| [ORACLE] DBA_2PC_PENDING 뷰 완벽 가이드 : 분산 트랜잭션 복구 핵심 (0) | 2025.10.12 |
| [ORACLE] DBA_2PC_NEIGHBORS 완전 해설 및 분산 트랜잭션 관리 가이드 (0) | 2025.10.12 |