Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Тоу Д. -> "Настройка SQL. Для профессионалов" -> 58

Настройка SQL. Для профессионалов - Тоу Д.

Тоу Д. Настройка SQL. Для профессионалов — СПб.: Питер, 2004. — 333 c.
ISBN 5-94723-959-0
Скачать (прямая ссылка): nastroykasqldlyaprof2004.djvu
Предыдущая << 1 .. 52 53 54 55 56 57 < 58 > 59 60 61 62 63 64 .. 161 >> Следующая


Если вы запрашиваете специальную статистику по распределению, Oracle сортирует строки по значению определенного столбца и размещает отсортированный список в указанном количестве сегментов, в каждом из которых хранится одинаковое количество строк. Tак как Oracle уже знает, что в диапазонах находится оди-
Управление планами в Oracle

115

наковое количество строк, серверу требуется найти только конечные точки диапазонов значений для каждого сегмента. В нашем примере с 20 сегментами в первом сегменте может храниться диапазон от ’ CA' до ' CA', а во втором — диапазон от ' CA' до ' CL1. В следующих 17 сегментах может храниться наиболее часто встречающееся значение — диапазон от 1 CL ‘ до 1 CLВ последнем сегменте будет храниться диапазон от ' CL' до ' OP', то есть диапазон, включающий самое редкое значение. Таким образом, Oracle может сделать вывод, что селективность столбца равна 5-10 % для значения ‘ CA', 85-95 % для значения ’ CL' и 0-5 % для значения 'OP'. Так как необходимо, чтобы оптимизатор точно знал, насколько селективно значение 'OP', стоит выбрать большее количество сегментов — возможно, максимальное, равное 254. (Oracle сжимает информацию в сегменте, когда рассматривается небольшое количество значений, поэтому стоимость большого количества сегментов будет небольшой.) Чтобы создать 254 сегмента для нашего примера, в схеме, владельцем которой является Appl_Prod, выполните следующую команду:

BEGIN

DBMS_STATS.GATHER_TABLE_STATS ('Appl_Prod'.'Orders1.

METH0D_DPT => 'FOR COLUMNS SIZE 254 Status_Code'):

END:

I

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

Общий синтаксис подсказок

В Oracle подсказки используются для ручного управления стоимостной оптимизацией. Синтаксически эти подсказки принимают форму комментариев, как, например, /*+ <Hint_String> */, стоящих сразу же за ключевым словом SELECT. Oracle распознает, что это подсказка, а не комментарий, за счет знака + в начале и расположения подсказки — она обязана располагаться сразу же за словом SELECT. Ho с точки зрения стандартного синтаксиса SQL подсказки все же являются комментариями, так как они не мешают разбору SQL-выражения, если оно также должно выполняться другими серверами баз данных.

ПРИМЕЧАНИЕ ---------------------------------------------------------------------------

Подсказки Oracle не помогают получить быстрые планы выполнения в других базах данных, отличных от Oracle, и, к сожалению, в данный момент невозможно использовать настроенный вручную SQL-запрос в разнообразных базах данных и во всех них проводить одинаковую ручную настройку.

Каждая подсказка влияет только на тот блок SELECT, в котором находится. Поэтому, чтобы контролировать порядок соединений и выбора индексов в подзапросе, поместите подсказку после ключевого слова SELECT, с которого начинается подзапрос. Чтобы воздействовать на порядок соединений и выбор индексов во внешнем запросе, поместите подсказку сразу же после SELECT во внешнем запросе.

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

В настройке с применением подсказок есть два крайних случая.

¦ Можно использовать минимум указаний для получения желаемого плана выполнения или, по меньшей мере, плана, близкого к идеальному. Аргументы в
116

4. Управление планами выполнения

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

¦ Если вы не получили от CB О желаемый план автоматически, то предполагаете, что CBO сделал неверные предположения, которые распространяются на весь код и портят все его вычисления. Следовательно, нужно оставить ему минимальную свободу действий, явно и полностью указывая, какой именно план вам нужен.

Если вы уверены в выбранном плане выполнения (а вы должны быть уверены, если применили все методы, которые я опишу далее в этой книге), то не имеет смысла полностью явно указывать план. Я пока что не сталкивался со случаем, когда хорошо выбранный надежный план выполнения требуется изменить, чтобы обработать данные с новым распределением или использовать новые возможности базы данных. С другой стороны, SQL, частично ограниченный набором подсказок, может выполняться неправильно, особенно если для некоторых таблиц или индексов статистика утеряна. Когда CBO делает неправильный выбор, ошибка, которая заставила сделать его этот выбор, вероятнее всего, портит весь план выполнения. Например, рассмотрим запрос:
Предыдущая << 1 .. 52 53 54 55 56 57 < 58 > 59 60 61 62 63 64 .. 161 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100