본문 바로가기
Database/Oracle

[ORACLE] DBA_ANALYZE_OBJECTS 완벽 가이드 : 통계 수집과 성능 최적화의 핵심

by Papa Martino V 2025. 10. 13.
728x90

DBA_ANALYZE_OBJECTS
[ORACLE] DBA_ANALYZE_OBJECTS

 

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 튜닝 프로세스

  1. 대상 테이블 또는 인덱스 식별
  2. DBA_ANALYZE_OBJECTS에서 마지막 통계 수행 시점 확인
  3. 필요 시 재수집:
    EXEC DBMS_STATS.GATHER_TABLE_STATS('HR','EMPLOYEES');
  4. DBA_ANALYZE_OBJECTS에서 상태 확인 후, 실행 계획(EXPLAIN PLAN) 재점검

9. 결론

DBA_ANALYZE_OBJECTS는 단순한 로그 뷰가 아닌, 통계 기반 성능 관리의 핵심 모니터링 도구입니다. 이 뷰를 통해 통계 수집의 성공률, 수행 시간, 실패 원인을 정확히 파악하면 데이터베이스의 옵티마이저 품질을 향상시키고, 예측 가능한 성능을 유지할 수 있습니다. 즉, Oracle 성능 관리의 출발점은 DBA_ANALYZE_OBJECTS의 정확한 이해에서 시작된다고 해도 과언이 아닙니다.


출처

728x90