[Oracle] 옵티마이저 통계정보 수집

·2025년 9월 8일
0

오라클 관리

목록 보기
109/163

  • 매일 밤 10시에 테이블 통계정보 수집을 자동으로 하는데 변경이 20% 이상 변경이 일어난 테이블들에 대해서만 수집을 해줌

[실습1] 자주 변경되는 테이블들에 대해서 통계정보를 수집해야하는 이유 테스트

SELECT count(*) from emp;

select table_name, num_rows, last_analyzed
 from user_tables
 where table_name='EMP';
 
 begin
 dbms_stats.gather_table_stats('SCOTT','EMP');
 end;
 /
 
select table_name, num_rows, last_analyzed
 from user_tables
 where table_name='EMP';
 
insert into emp
select *
 from emp;
 
commit;

select count(*) from emp;  -- 28건이 되었습니다.

select table_name, num_rows, last_analyzed
 from user_tables
 where table_name='EMP';  -- 14건입니다.

[실습2] 19c 를 기준으로 몇퍼센트 변경된 테이블만 자동으로 밤 10시에 테이블 통계정보를 수집하는지 확인하시오

SELECT DBMS_STATS.get_prefs('STALE_PERCENT') AS global_stale_percent
FROM dual;

[실습3] 5%로 줄이고 싶다면?

-- 전체 DB 기본값을 5%로
BEGIN
  DBMS_STATS.set_global_prefs('STALE_PERCENT', '5');
END;
/

SELECT DBMS_STATS.get_prefs('STALE_PERCENT') AS global_stale_percent
FROM dual;

--> 5% 변경되면 테이블 통계정보가 밤 10시에 수집됨


[실습3] scott 의 dept 테이블은 30% 변경될때만 통계정보가 밤10시에 수집되게하시오

exec dbms_stats.set_table_prefs('scott', 'dept', 'stale_percent', 30);

select  table_name, preference_name, preference_value
   from  user_tab_stat_prefs
   where  table_name='DEPT';

문제1. scott 의 emp 테이블이 40% 변경될때만 테이블 통계정보가 밤10시에 수집되게하시오

exec dbms_stats.set_table_prefs('scott', 'emp', 'stale_percent', 40);

select  table_name, preference_name, preference_value
   from  user_tab_stat_prefs
   where  table_name='EMP';

0개의 댓글