Архив

Публикации с меткой ‘statistics’

Убрать пустые блоки из таблицы

Если в таблице слишком много пустых блоков, то оптимизировать данные помогут следующие действия

ALTER TABLE name_table MOVE;
ALTER INDEX name_index REBUILD;

и не забыть обновить статистику для таблицы

begin
dbms_stats.gather_table_stats(schema,table);
end;

Читать дальше про “Убрать пустые блоки из таблицы” »

Categories: SQL Tags: , , ,

Сбор статистики

17 Март 2010 1 комментарий

Для сбора статистики используем процедуру

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;
Categories: SQL Tags: ,