DeepEdit!

Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Какой оптимизатор используется?

ЕСЛИ значение параметра OF'l"lMlZF^R_MODF равно CHOOSE, то призна­ком, определяющим, будет ли использоваться стоимостный оптимизатор, слу­жит наличие или отсутствие статистики в словаре данных. В случае ее отсутствия для всех входящих в состав оператора SQL объектов используется оптимизатор, основанный на системе правил. Если статистика были сгенериро­вана, возможно применение стоимостного оптимизатора при условии, что зна­чение параметра OPTIMIZER_MODE не было изменено на уровне сеанса или изменено подсказкой (/*+ 

hint     

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

Важно, чтобы статистика была сгенерирована для всех объектов во всех схе­мах приложений (за исключением случаев, когда используемое приложение, по­ставленное сторонней фирмой, не поддерживает стоимостный оптимизатор).
Это связано с тем, что наличие частичной статистики, скажем, для оператора
select, может заставить обслуживающий этот оператор SQL серверный процесс
выполнить оценку статистики объектов, для которых ранее не производился
сбор статистики, причем только на время выполнения оператора. Такая дина-
мически собранная в исполнительном периоде статистика не записывается на
постоянное хранение в словарь данных, и поэтому такая история будет повторя-
ться при каждом выполнении запроса. Это может привести к существенному
снижению производительности. Если используемое вами приложение от сто-
ронней фирмы не поддерживает стоимостную оптимизацию (т. е. ваш постав-
щик использует оптимизацию по правилам, а вы заинтересованы в длительном
сотрудничестве с ним), убедитесь, что из схемы приложения удалена вся стати-
стика. В этом легко убедиться, выполнив запрос к столбцу        представле-
ния USERTABLES. Обнаружение значений для каких-либо таблиц значит, что
для этих таблиц имеется вычисленная статистика. При наличии частичной ста-
тистики наблюдаемая производительность будет непредсказуемой. Это может
раздражать пользователей даже сильнее, чем постоянная плохая производите­льность (пользователь никогда не знает, есть ли у него время для того, чтобы вы­пить чашечку кофе или отметить что-нибудь в своем календаре, пока выполняется та или иная транзакция). Необходимо четко осознавать весь риск вычисления статистики в исполнительном периоде, что может существенно увеличить время выполнения приложения. Поэтому нужно либо вычислять ста­тистику для всех объектов, либо вообще не иметь статистики и пользоваться оп­тимизацией по правилам.

Замечание
Чтобы определить, когда в последний раз вычислялась статистика для объектов из данной схемы, нужно выполнить запрос к столбцу Last_Analyzed представления DBA_TAB_COLUMNS словаря данных. Можно выполнить этот запрос с ключевым словом DISTINCT, потому что в этом случае будет возвращено по одной строке для каждого столбца каждой таблицы.
 


портрет медведева . самокат детский трехколесный







jAntivirus