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

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

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!

 
 
 

Вас заинтересует / Intresting for you:

Статистика. Что использовать D...
Статистика. Что использовать D... 5056 просмотров Stas Belkov Tue, 21 Nov 2017, 13:31:33
Сбор статистики производительн...
Сбор статистики производительн... 3436 просмотров Александров Попков Tue, 21 Nov 2017, 13:18:05
Пользователи Oracle: управлени...
Пользователи Oracle: управлени... 8989 просмотров Дэн Tue, 21 Nov 2017, 13:18:05
Оптимизация производительности...
Оптимизация производительности... 1129 просмотров Илья Дергунов Tue, 21 Nov 2017, 13:28:01
Войдите чтобы комментировать

ildergun аватар
ildergun ответил в теме #8513 02 июнь 2017 11:47
Я чаще использую ANALYZE для сбора статистики в Oracle. Мэйби я "олд скул"?))