오라클 통계자료 생성 주기 와 비율
통계자료 생성은 매일이라도 조금씩 해야한다
혹은 데이타 쌓이는 양이 비슷하면 안해도 된다
통계생성 비율은 몇%가 적정한가의 문제로 많은 고민을 했습니다
시스템이 24시간 풀가동이기 때문에 통계자료를 생성할 시간을 확보하는게 힘든 것이 현실이라
적정한 비율, 주기로 많은 고민을 하였습니다.
저와 같은 고민이 있으신 분들은 아래 처럼 주기와 비율을 생성해 주시면 됩니다.
통계정보 생성은 6개월~1년 정도(또는 1~2년) 주기로 해주는게 좋습니다.
하지만, 대용량의 테이블일 경우, 통계 정보 생성에 시간이 많이 들기 때문에 시스템 정기 점검 시간을
고려해서 하는 것이 필요합니다.
데이터가 큰 변화없이 일정하게 증가하는 시스템이라면 통계정보 생성 주기를 더 늦추어도 상관없습니다.
단, 새로운 파티션 추가 or 새로운 index / table이 추가되면 통계 정보 생성을 해주어야 합니다.
(신규 index나 table은 데이터 입력 후 통계 정보 신규 작업을 해야 함)
대용량 테이블의 경우 통계정보 생성시 estimate statistics의 비율을 작게 설정해서 시간을 단축할 수 있습니다.
100G 이상의 대용량 테이블이면 1%로만 통계정보를 만들어도 충분합니다.
통계생성 비율은 아래를 참조 하세요
SELECT SEGMENT_NAME,
SUM(BYTES)/1024/1024 SSIZE_MB
FROM USER_SEGMENTS
WHERE SEGMENT_TYPE LIKE 'TABLE%'
GROUP BY SEGMENT_NAME ;
SSIZE_MB의 크기로 생성 비율을 조정
case when SSIZE_MB > 10000 then ' estimate_percent =>0.1',
when SSIZE_MB > 5000 then ' estimate_percent =>1, '
when SSIZE_MB > 1000 then ' estimate_percent =>5, '
when SSIZE_MB > 500 then ' estimate_percent =>10, '
when SSIZE_MB > 100 then ' estimate_percent =>30, '
when SSIZE_MB > 0 then ' estimate_percent =>100, '
else ''
end
Size가 10000MB 이상일 경우 degree 수는 DB서버 상황 및 수행 시간에 맞게 조정
통계자료 생성 쿼리
select 'DBMS_STATS.GATHER_TABLE_STATS (ownname => '''||'scott'||''''||', tabname =>'||''''||table_name||''''||
', method_opt => ''for all columns size 1'''||','||
case when US.SSIZE_MB > 10000 then ' estimate_percent =>0.1, '
when US.SSIZE_MB > 5000 then ' estimate_percent =>1, '
when US.SSIZE_MB > 1000 then ' estimate_percent =>5, '
when US.SSIZE_MB > 500 then ' estimate_percent =>10, '
when US.SSIZE_MB > 100 then ' estimate_percent =>30, '
when US.SSIZE_MB > 0 then ' estimate_percent =>100, '
else ''
end||'granularity => ''all'', degree => ''16'', cascade=> TRUE );'
||' --> '||US.SSIZE_MB||'MB,'||' PARTITIONED: '||PARTITIONED
from user_tables t,
(SELECT SEGMENT_NAME,
SUM(BYTES)/1024/1024 SSIZE_MB
FROM USER_SEGMENTS
WHERE SEGMENT_TYPE LIKE 'TABLE%'
GROUP BY SEGMENT_NAME) US
Where t.TABLE_NAME = US.SEGMENT_NAME
ORDER BY US.SSIZE_MB DESC,
t.table_name;