ЕСЛИ значение параметра OF'l"lMlZF^R_MODF равно CHOOSE, то признаком, определяющим, будет ли использоваться стоимостный оптимизатор, служит наличие или отсутствие статистики в словаре данных. В случае ее отсутствия для всех входящих в состав оператора SQL объектов используется оптимизатор, основанный на системе правил. Если статистика были сгенерирована, возможно применение стоимостного оптимизатора при условии, что значение параметра OPTIMIZER_MODE не было изменено на уровне сеанса или изменено подсказкой (/*+
hint
на уровне отдельного оператора.Замечание
Если для таблицы установлена степень параллелизма, стоимостный оптимизатор будет использоваться даже в случае отсутствия статистики.
Важно, чтобы статистика была сгенерирована для всех объектов во всех схемах приложений (за исключением случаев, когда используемое приложение, поставленное сторонней фирмой, не поддерживает стоимостный оптимизатор).
Это связано с тем, что наличие частичной статистики, скажем, для оператора
select, может заставить обслуживающий этот оператор SQL серверный процесс
выполнить оценку статистики объектов, для которых ранее не производился
сбор статистики, причем только на время выполнения оператора. Такая дина-
мически собранная в исполнительном периоде статистика не записывается на
постоянное хранение в словарь данных, и поэтому такая история будет повторя-
ться при каждом выполнении запроса. Это может привести к существенному
снижению производительности. Если используемое вами приложение от сто-
ронней фирмы не поддерживает стоимостную оптимизацию (т. е. ваш постав-
щик использует оптимизацию по правилам, а вы заинтересованы в длительном
сотрудничестве с ним), убедитесь, что из схемы приложения удалена вся стати-
стика. В этом легко убедиться, выполнив запрос к столбцу представле-
ния USERTABLES. Обнаружение значений для каких-либо таблиц значит, что
для этих таблиц имеется вычисленная статистика. При наличии частичной ста-
тистики наблюдаемая производительность будет непредсказуемой. Это может
сбор статистики, причем только на время выполнения оператора. Такая дина-
мически собранная в исполнительном периоде статистика не записывается на
постоянное хранение в словарь данных, и поэтому такая история будет повторя-
ться при каждом выполнении запроса. Это может привести к существенному
снижению производительности. Если используемое вами приложение от сто-
ронней фирмы не поддерживает стоимостную оптимизацию (т. е. ваш постав-
щик использует оптимизацию по правилам, а вы заинтересованы в длительном
сотрудничестве с ним), убедитесь, что из схемы приложения удалена вся стати-
стика. В этом легко убедиться, выполнив запрос к столбцу представле-
ния USERTABLES. Обнаружение значений для каких-либо таблиц значит, что
для этих таблиц имеется вычисленная статистика. При наличии частичной ста-
тистики наблюдаемая производительность будет непредсказуемой. Это может
раздражать пользователей даже сильнее, чем постоянная плохая производительность (пользователь никогда не знает, есть ли у него время для того, чтобы выпить чашечку кофе или отметить что-нибудь в своем календаре, пока выполняется та или иная транзакция). Необходимо четко осознавать весь риск вычисления статистики в исполнительном периоде, что может существенно увеличить время выполнения приложения. Поэтому нужно либо вычислять статистику для всех объектов, либо вообще не иметь статистики и пользоваться оптимизацией по правилам.
Замечание
Чтобы определить, когда в последний раз вычислялась статистика для объектов из данной схемы, нужно выполнить запрос к столбцу Last_Analyzed представления DBA_TAB_COLUMNS словаря данных. Можно выполнить этот запрос с ключевым словом DISTINCT, потому что в этом случае будет возвращено по одной строке для каждого столбца каждой таблицы.
< Предыдущая | Следующая > |
---|