[오라클] 테이블 자동 통계정보가 모든 데이터(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
'PC · IT · DB > Oracle' 카테고리의 다른 글
[오라클] Oracle 테이블, 인덱스, 컬럼 이름 변경하는 방법 (0) | 2023.11.28 |
---|---|
[오라클] Oracle 12C, EXPDP VIEWS_AS_TABLES 사용방법 예제 제약사항 주의사항 (0) | 2023.11.10 |
[오라클] v$sqlarea 쿼리 로그/이력 및 통계 확인 (Query Disk Read/Cost/Time/CPU/IO) (0) | 2023.09.14 |
[오라클] 테이블스페이스 사용 용량, 여유공간 조회 쿼리 (0) | 2023.09.01 |
[오라클] 정규식 REGEXP_LIKE 전화번호 유효성 검사 (Validate Phone Number) (0) | 2023.08.30 |