PC · IT · DB/Oracle

[오라클] 테이블 자동 통계정보가 모든 데이터(100%)를 다 할 때 Estimate Percent 설정 방법

뿌레도 2023. 10. 26. 23:09
728x90
[오라클] 테이블 자동 통계정보가 모든 데이터(100%)를 다 할 때 Estimate Percent 설정 방법

 

 

 오라클 자동 통계분석이 모든 Row에 대해서 100% 수행되는 경우는 테이블이 작은 경우, 테이블이 자주 변경되는 경우, 정확한 실행 계획이 필요한 경우 등이 있습니다. 위와 같은 상황에서는 모든 Row에 대해서 100% 통계분석을 수행하는 것이 적절할 수 있으나, 일반적으로는 적절한 통계 샘플링이나 통계 업데이트 주기를 조정하여 성능과 정확성을 균형있게 유지하는 것이 좋습니다.

 


 

 

오라클 자동 통계분석이 모든 Row에 대해서 100% 수행되는 경우에는 다음과 같은 문제가 발생할 수 있습니다.

1. 성능 저하

 모든 Row에 대해서 100% 통계분석을 수행하면 많은 시간과 자원이 소모됩니다. 특히 대량의 데이터가 있는 경우에는 통계분석에 소요되는 시간이 길어지고, 이로 인해 쿼리의 실행 속도가 느려질 수 있습니다.

2. 불필요한 통계 업데이트

 모든 Row에 대해서 100% 통계분석을 수행하면 데이터가 변경되지 않았더라도 매번 통계를 업데이트해야 합니다. 이는 불필요한 리소스 소모를 초래하고, 데이터베이스의 부하를 증가시킬 수 있습니다.

3.통계 오류 가능성

 모든 Row에 대해서 100% 통계분석을 수행하더라도 완벽한 통계정보를 보장할 수는 없습니다. 데이터의 일부만을 통계분석하는 것이 일반적이며, 이를 기반으로 쿼리 실행 계획이 결정됩니다. 따라서 모든 Row에 대해서 통계분석을 수행하는 것은 통계 오류 가능성을 증가시킬 수 있습니다.

따라서 모든 Row에 대해서 100% 통계분석을 수행하는 것은 권장되지 않습니다. 이를 위해서 다음과 같이 조치를 취할 수 있습니다.

 

 

 


 

오라클 자동 통계분석 퍼센트 설정하기

exec dbms_stats.set_table_prefs(
OWNNAME=>'계정'
,TABNAME=>'테이블 명'
,PNAME=>'ESTIMATE_PERCENT'
,PVALUE=>'5'
);

 

ex) TRIVIA 계정이 소유한 KOREA 테이블의 자동 통계분석 퍼센트를 5퍼센트로 설정

exec dbms_stats.set_table_prefs(
OWNNAME=>'TRIVIA'
,TABNAME=>'KOREA'
,PNAME=>'ESTIMATE_PERCENT'
,PVALUE=>'5'
);

 

ex) user_tables 에서 각 테이블 별 설정 구문 만들기

select
table_name, num_rows, sample_size
, round((sample_size/num_rows)*100,2) as "PERCENT" -- sample이 전체 rows 대비 몇 %
, last_analyzed -- 마지막 통계분석 일시
,'exec dbms_stats.set_table_prefs(OWNNAME=>''USERS'',TABNAME=>'''||table_name||''',PNAME=>''ESTIMATE_PERCENT'',PVALUE=>''5'');' as "설정_통계_%"
from user_tables
where num_rows > 0
order by num_rows desc

 

#오라클 자동 통계분석 #오라클 Estimate Percent #오라클 통계분석 설정 #오라클 통계분석 100% 될 때 #오라클 테이블 별 통계분석 #오라클 user_tables #오라클 dbms_stats.set_table_prefs

300x250