2014-09-16 1 views
0

У меня есть Oracle 11g DB, и некоторые из таблиц усекаются и повторно импортируются из исходной системы регулярно. У меня нет индекса на этих таблицах (по причинам производительности импорта), хотя у них много миллионов строк. Нужно ли собирать статистику таблиц каждый раз, когда я их импортирую? Когда я обрабатываю таблицу, мне все равно нужно анализировать и обрабатывать каждую строку.Нужно ли собирать статистику по таблице Oracle, у которой нет индекса?

+0

Truncate удаляет затраты на обслуживание против частых DML, поскольку он сбрасывает «HIGH WATERMARK» на ноль. Посмотрите на мой ответ ниже. –

+0

Пожалуйста, прекратите голосование, чтобы переместить эти вопросы в DBA. Этот вопрос четко соответствует всем 4 критериям, перечисленным в [Справочном центре] (http://stackoverflow.com/help/on-topic). В хранилище данных этот вопрос - проблема программиста, а не проблема с DBA. –

ответ

1

Статистика оптимизатора должна быть собрана после значительных изменений данных.

Это хорошее общее правило для подражания. Есть исключения, но отсутствие индексов не является достаточно хорошей причиной. Это правда, что одним из основных преимуществ точной статистики является выбор того, следует ли использовать полное сканирование таблицы или доступ к индексу. Но это лишь один из многих способов использования статистики. Например, если Oracle неправильно полагает, что таблица не имеет строк, она может по-прежнему использовать на ней НЕСТАНДАРНУЮ ЗАПИСЬ, что может быть катастрофическим, если в таблице действительно есть миллионы строк.

Настройки могут быть изменены для уменьшения времени сбора статистики. В частности, установка DEGREE может значительно повысить производительность. 11g имеет отличный по умолчанию ESTIMATE_PERCENT, но иногда может быть полезно использовать очень низкое значение. Статистика также может быть импортирована из предыдущих запусков, если данные очень схожи.

Еще один фактор, который следует учитывать, заключается в том, что отказ от больших анализируемых таблиц может повлиять на последующие статистические задания. В большинстве баз данных есть ночная работа по сбору устаревших и отсутствующих статистических данных. Даже в хранилище данных часто будет такая работа, но с предположением, что действительно большие задания статистики будут выполняться вручную. Оставляя большие задания статистики для процессов по умолчанию, может перегружать эту систему и заставлять другую статистику устаревания ждать дольше.

0

С тех пор как вы делаете TRUNCATE каждый раз, Oracle приносит HIGH WATERMARK к нулю. Таким образом, вам не нужно беспокоиться об инкрементальном обслуживании.

Но, в отношении выполнения запроса при попадании в стол, вы ДОЛЖНЫ следовать правилам NORMALIZATION. Проверьте запрос EXECUTION PLAN, если вы видите FULL TABLE SCAN для LOW CARDINALITY, тогда вы должны рассмотреть эту колонку для индексирования.

Я бы предложил метод CTAS, если вам нужно слишком часто строить таблицу. CTAS означает create table as select. Это было бы очень эффективно. Кроме того, вы можете использовать NO LOGGING и другие функции по мере необходимости, чтобы уменьшить UNDO и REDO.

Смежные вопросы