Можно ли использовать статистику при запуске dbms_stats.gather_table_stats - PullRequest
0 голосов
/ 29 ноября 2018

Я работаю над oracle11g.

Есть внешний процесс, выполняющий dbms_stats.gather_table_stats для данной таблицы.В частности, он запускает этот код:

dbms_stats.gather_table_stats('STAGING','NEW_TRANSACTIONS',
      estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, 
      cascade=>true, method_opt=> 'FOR ALL INDEXED COLUMNS SIZE 1', 
      NO_INVALIDATE=>FALSE,DEGREE=>8); 

Автоматические сборы статистики не работают на этой таблице, потому что окна обслуживания находятся в 6-8 вечера, но эта таблица полностью обновляется около 12 вечера, вызывая статистикунесвежий.Следовательно, мы собираем статистику ad-hoc.

Предположим, что сбор статистики занимает 60 секунд.

Что произойдет, если запрос будет выполняться по этой таблице во время регенерации статистики?

Будут ли доступны предыдущие (устаревшие) статистические данные, пока не будут созданы новые?Или oracle полностью удаляет статистику при запуске dbms_stats.gather_table_stats?

Позвольте мне перефразировать этот вопрос следующим образом: в случае запроса, выполняющегося параллельно dbms_stats.gather_table_stats, какой сценарий может произойти:

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

  2. нет статистикидоступны для настройки правильного плана выполнения, а оптимизатор на основе затрат будет слепым при создании плана выполнения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...