Для сбора статистики используем процедуру
dbms_stats.gather_table_stats('SCOTT','EMP');
Если в базе данных имеются таблицы, которые часто обновляются, то частый сбор статистики может негативно повлиять на производительность базы данных. Для того, чтоб исключить объекты из автоматического или любого другого сбора статистики можно «закрепить» ее статистику:
begin
dbms_stats.gather_table_stats('SCOTT','EMP');
dbms_stats.lock_table_stats('SCOTT','EMP');
end;
Теперь, по этой таблице невозможно будет собрать статистику ни автоматически, ни вручную:
SQL>exec dbms_stats.gather_table_stats('SCOTT','EMP');
begin dbms_stats.gather_table_stats('SCOTT','EMP'); end;
ORA-20005: object statistics are locked (stattype = ALL)
ORA-06512: at "SYS.DBMS_STATS", line 13182
ORA-06512: at "SYS.DBMS_STATS", line 13202
ORA-06512: at line 2
Снять блокировку статистики:
dbms_stats.unlock_table_stats('SCOTT','EMP');
Посмотреть данные о сборе статистики можно в таблице DBA_TAB_STATISTICS
select * from DBA_TAB_STATISTICS t where t.table_name = :name_table
Собрать статистику для индекса
begin
dbms_stats.gather_index_stats('OWNER', 'INDEX_NAME');
end;
Статистика на секцию
begin
dbms_stats.gather_table_stats(ownname => p_owner, tabname => p_table_name, partname => p_partition_name, degree=> 4, no_invalidate=>true );
end;
Последние комментарии