Oracle: анализ таблицы против Gather_Table_Stats против Gather_Schema_Stats - PullRequest
0 голосов
/ 14 мая 2018

В настоящее время в моей БД мой предшественник, который работал над БД, создал задание, которое каждые выходные собирает список всех таблиц в БД и по отдельности для каждой таблицы выполняет ниже двух команд в таком порядке:

ANALYZE TABLE xxTable_Namexx ESTIMATE STATISTICS FOR ALL INDEXED COLUMNS SIZE 75 SAMPLE 100 PERCENT;

EXEC dbms_stats.gather_table_stats(xxSchemaxx,xxTable_Namexx,cascade=>TRUE);

Недавно кто-то предложил мне:

1.) Таблица ANALYZE - это старый метод сбора статистики, и оптимизатор больше его не использует? правда ли, что статистика из этой команды бесполезна во всей БД или она где-то используется?

2.) Вместо того, чтобы делать все это, достаточно ежедневного запуска:

dbms_stats.gather_schema_stats(xxSchemaxx,cascade=>true);

Каков размер / выборка%, если ничего не указано ??

3.) Какова общая практика / частота сбора статистики в базе данных. (Данные обновляются, вставляются, удаляются ежедневно). Я все еще предпочитаю делать это каждый уик-энд.

Заранее спасибо.

1 Ответ

0 голосов
/ 14 мая 2018

Да, ANALYZE в настоящее время практически не используется:

Для сбора большей части статистики используйте пакет DBMS_STATS, который позволяет параллельно собирать статистику, собирать глобальную статистику дляразбитые на части объекты и другие настройки статистики.См. Справочник по пакетам и типам Oracle Database PL / SQL для получения дополнительной информации о пакете DBMS_STATS.

Используйте оператор ANALYZE (а не DBMS_STATS) для сбора статистики, не связанной с оптимизатором на основе затрат:

  • Для использования предложений VALIDATE или LIST CHAINED ROWS

  • Для сбора информации о блоках списков фрилансов

Каков размер / выборка%, если ничего не указано ??

Параметр называется measure_percent :

Процент строк воценка (NULL означает вычисление): допустимый диапазон составляет [0,000001,100].Используйте константу DBMS_STATS.AUTO_SAMPLE_SIZE, чтобы Oracle определил подходящий размер выборки для хорошей статистики.Это значение по умолчанию. Значение по умолчанию можно изменить с помощью SET_DATABASE_PREFS Процедура, SET_GLOBAL_PREFS Процедура, SET_SCHEMA_PREFS Процедура и SET_TABLE_PREFS Процедура.

Значение по умолчанию, которое вы можете запросить с помощью функции DBMS_STATS.get_param('ESTIMATE_PERCENT') или DBMS_STATS.GET_PREFS('ESTIMATE_PERCENT')

По умолчанию Oracle создает задание внутреннего планировщика при установке, которое автоматически собирает статистику в ночное время.(называется BSLN_MAINTAIN_STATS_JOB)

...