Статистика. Что использовать DBMS_STATS или ANALYZE?

dbstalker, 12 сентября

Для того, чтобы понять зачем нужен сбор статистики, рекомендую ознакомиться с постами «Оптимизатор. Начальные понятия» здесь , здесь и здесь.

C каждой новой версией ORACLE стоимостной оптимизатор становится все более сложным.

Поэтому для принятия правильных решений ему нужны достоверные статистические данные. Администратор должен об этом побеспокоиться, так как сбор статистики непосредственно влияет на производительность всей системы. Соответственно устаревшие статистические данные являются причиной выбора неоптимального плана выполнения запросов.

Для сбора статистики используется пакет dbms_stats и оператор analyze. Однако Oracle "настоятельно" рекомендует использовать именно пакет dbms_stats. Да и Том Кайт придерживается того же мнения. Его авторитетные утверждения:

  • dbms_stats - это рекомендованный, предпочтительный метод сбора статистики
  • DBMS_STATS позволяет выполнять сбор статистики параллельно
  • С помощью DBMS_STATS можно выполнять мониторинг статистики и получать устаревшую статистику для измененных строк
  • С помощью dbms_stats можно непосредственно импортировать/экспортировать/задавать статистику
  • Пакет dbms_stats упрощает автоматизацию обновления статистики
  • Пакет dbms_stats (в 9i) позволяет собирать статистику системы
  • Пакет dbms_stats позволяет анализировать внешние таблицы
  • с помощью dbms_stats можно собирать статистику в удаленной базе данных

Так как только dbms_stats собирает глобальную статистику (столбец global_stats в dba_tables, dba_indexes, dba_tab_cols, dba_tab_columns, dba_tab_col_statistics), значит, по значению столбца global_stats можно определить каким образом собиралась статистика - DBMS_STATS или ANALYZE.

DBMS_STATS собирает статистику только для стоимостного оптимизатора. То есть этот пакет не собирает никакую иную информацию. Например, не собирает такие данные: количество chained rows, средний объем свободного места в блоке, количество неиспользованных блоков данных. Такую статистику собирает оператор analyze.

Обратите внимание, что даже та статистика, которая собирается и DBMS_STATS, и ANALYZE несколько отличается. Это в первую очередь относится к avg_row_len и avg_col_len.

К тому же ожидается, что в будущем оператор ANALYZE не будет собирать статистику, необходимую стоимостному оптимизатору. Эта функция будет возложена исключительно на DBMS_STATS!

 

Новый комментарий

Я не спамер: введите суму 7+6



 

От авторов блога

О Блоге - прочитай перед началом.

Задать вопрос и получить ответ - уже решено 94 вопросов

Глоссарий - список терминов и сокращений


 
 

Бизнес форум

Последние темы:

Расписание автобусов
18 июля, 3 ответа
Отдых в августе
17 июля, 4 ответа