개요
통계 수집 프로시저는 DBMS에서 통계 정보 수집 및 업데이트를 위한 절차 입니다.
통계 정보는 쿼리 실행 계획 최적화에 활용할 수 있고, 이 때 프로시저를 이용할 경우 자동화 방식으로 정보를 더욱 효율적으로 수집할 수 있습니다.
방법
Table
CREATE OR REPLACE PROCEDURE SYS.STATS_NOR_TABLE
(
owner_in IN VARCHAR
)
IS
CURSOR stats_loop IS
select
'call dbms_stats.gather_table_stats('''||owner||''', '''||table_name||''''||
', estimate_percent=>5,'||' method_opt=>'''||'FOR ALL INDEXED COLUMNS SIZE 124'''||
', degree=>8);' as stats_list
from dba_tables
where owner = owner_in
and partitioned = 'NO';
BEGIN
FOR stats_msg in stats_loop LOOP
DBMS_OUTPUT.PUT_LINE('stats msg : ' || stats_msg.stats_list);
execute immediate stats_msg.stats_list;
END LOOP;
END STATS_NOR_TABLE;
SQL
복사
Partition table
CREATE OR REPLACE PROCEDURE SYS.STATS_PART_TABLE
(
owner_in IN VARCHAR
)
IS
CURSOR stats_loop IS
select
'call dbms_stats.gather_table_stats('''||owner||''', '''||table_name||''''||', partname=>'||''''||partition_name||''''||
', estimate_percent=>5,'||' method_opt=>'''||'FOR ALL INDEXED COLUMNS SIZE 124'''||', degree=>8'||',
granularity=>''PARTITION'''||');' as stats_list
from dba_tab_partitions
where owner = owner_in;
BEGIN
FOR stats_msg in stats_loop LOOP
DBMS_OUTPUT.PUT_LINE('stats msg : ' || stats_msg.stats_list);
execute immediate stats_msg.stats_list;
END LOOP;
END STATS_PART_TABLE;
SQL
복사