오라클 인덱스 통계 갱신 여부 확인

2025. 2. 3. 00:03IT/Oracle

반응형

1. 인덱스 통계 갱신 여부 확인 쿼리

다음 SQL 쿼리를 사용하면 인덱스의 통계가 마지막으로 갱신된 날짜를 확인할 수 있습니다

SELECT 
    INDEX_NAME,
    TABLE_NAME,
    LAST_ANALYZED
FROM 
    USER_INDEXES
WHERE 
    TABLE_NAME = '테이블명';
  • INDEX_NAME: 인덱스 이름
  • TABLE_NAME: 테이블 이름
  • LAST_ANALYZED: 인덱스 통계가 마지막으로 갱신된 날짜 및 시간
    • 값이 NULL인 경우 해당 인덱스에 대해 통계가 생성된 적이 없습니다

2. 특정 스키마 또는 데이터베이스 전체 확인

특정 스키마에서 모든 인덱스 확인

SELECT 
    INDEX_NAME,
    TABLE_NAME,
    LAST_ANALYZED
FROM 
    DBA_INDEXES
WHERE 
    OWNER = '스키마명'
ORDER BY LAST_ANALYZED DESC;

 
데이터베이스 내 전체 인덱스 확인

ELECT 
    OWNER,
    INDEX_NAME,
    TABLE_NAME,
    LAST_ANALYZED
FROM 
    DBA_INDEXES
ORDER BY LAST_ANALYZED DESC;

3. 최근 갱신 여부 확인

갱신되지 않은 인덱스 목록 확인

다음 쿼리는 통계 갱신이 이루어지지 않은 인덱스를 보여줍니다(LAST_ANALYZED가 NULL인 경우).

SELECT 
    INDEX_NAME, 
    TABLE_NAME, 
    LAST_ANALYZED 
FROM 
    USER_INDEXES
WHERE 
    LAST_ANALYZED IS NULL;

특정 날짜 이후 갱신된 인덱스 확인

특정 시점 이후 통계가 갱신된 인덱스를 조회할 수도 있습니다

SELECT 
    INDEX_NAME, 
    TABLE_NAME, 
    LAST_ANALYZED 
FROM 
    USER_INDEXES
WHERE 
    LAST_ANALYZED >= TO_DATE('2024-12-01', 'YYYY-MM-DD');

4. 통계 갱신이 필요한 경우

통계 갱신이 오래되었거나 LAST_ANALYZED가 NULL인 경우, 해당 인덱스에 대해 통계를 수집해야 합니다. 다음과 같은 방법으로 통계 갱신을 수행합니다

인덱스 통계 갱신

EXEC DBMS_STATS.GATHER_INDEX_STATS('스키마명', '인덱스명');

 
테이블과 모든 인덱스 통계 갱신

EXEC DBMS_STATS.GATHER_TABLE_STATS('스키마명', '테이블명');

 
데이터베이스 전체 통계 갱신

EXEC DBMS_STATS.GATHER_DATABASE_STATS;

 

5. 통계 갱신 자동화 확인

오라클은 기본적으로 자동 통계 수집이 활성화되어 있을 수 있습니다. 자동 통계 수집 설정을 확인하려면 다음 쿼리를 실행합니다

SELECT 
    STATUS 
FROM 
    DBA_SCHEDULER_JOBS
WHERE 
    JOB_NAME = 'AUTO_STATS_JOB';

 
STATUS DISABLED인 경우 자동 통계 수집이 비활성화된 상태입니다. 활성화하려면 아래 명령어를 사용하세요

XEC DBMS_AUTO_TASK_ADMIN.ENABLE(client_name => 'auto optimizer stats collection', operation => NULL, window_name => NULL);
반응형