Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Вопрос по CBO  [new]
D/S
Member

Откуда:
Сообщений: 55
9i
Запрос - три относительно больших (0.5 - 3 млн. записей) таблицы связаны по некотором полям + ограничения диапозонов выборки данных... То есть, структура запроса вовсе не "навороченная".
Удивляет то, что без использования хинтов Cost запроса выше, чем при их добавлении. Выходит, что оптимизатор для этого запроса не может выбрать оптимальный на его взгляд план? Ведь оптимальным он считает тот, который обладает наименьшей стоимостью?
Реальное же время выполнения запроса показывает, что CBO в данном случае прав; но почему тогда Cost выше? Понимаю, что стоимость - это мера использования ресурсов, а не скорости выполнения, но тогда как же догма самого оптимизатора стремиться к наименьшей стоимости?
15 ноя 07, 10:48    [4919092]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CBO  [new]
Софтверный проктолог
Member [заблокирован]

Откуда: Москва
Сообщений: 2230
Вам тоже сейчас посоветуют читать Concepts.
15 ноя 07, 10:52    [4919133]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CBO  [new]
нуб
Member

Откуда:
Сообщений: 171
Софтверный проктолог
Вам тоже сейчас посоветуют читать Concepts.

да ну, и что именно там читать?

D/S

Приведи пример, сам запрос, планы с хинтами и без - тогда посмотрим
15 ноя 07, 10:54    [4919153]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CBO  [new]
D/S
Member

Откуда:
Сообщений: 55
Мой вопрос безотносительно конкретного запроса. И возникает как раз после всех этих Concepts и иже с ними.
Спрошу без лишней воды: CBO выбирает план с наименьшей стоимостью? Или я глубоко заблуждаюсь уже в этом?
15 ноя 07, 11:10    [4919308]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CBO  [new]
х.з.
Member

Откуда:
Сообщений: 765
D/S
CBO выбирает план с наименьшей стоимостью?

да, но главный вопрос по каким критериям он ее считает - вернее что учитывает
15 ноя 07, 11:13    [4919340]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CBO  [new]
х.з.
Member

Откуда:
Сообщений: 765
интересный момент: при получении одинаковой стоимости для двух(более) планов выполнения - он выберет первый просчитаный - вроде так.
15 ноя 07, 11:16    [4919364]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CBO  [new]
D/S
Member

Откуда:
Сообщений: 55
Теперь исходим из того, что выбирает план с наименьшим костом. Тогда почему путем добавления хинта (USE_HASH(T1 T2 T3) в данном случае) нам удается снизить стоимость? Почему CBO сам не находит такой путь, что ему мешает? Вернее, почему он его все же поступает верно и отвергает его (реальное время выборки по данному запросу сильно проседает)?
15 ноя 07, 11:22    [4919427]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CBO  [new]
D/S
Member

Откуда:
Сообщений: 55
нуб

Приведи пример, сам запрос, планы с хинтами и без - тогда посмотрим

Данная просьба не проигнорирована, просто не вижу смысла заниматься обструфикацией кода, когда не вижу смысла в его приведении. Если в данном случае это критично - приведу запрос и планы.
15 ноя 07, 11:24    [4919450]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CBO  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
D/S
Тогда почему путем добавления хинта (USE_HASH(T1 T2 T3) в данном случае) нам удается снизить стоимость? Почему CBO сам не находит такой путь, что ему мешает?
Потому что ему предоставлена неверная информация, из которой он делает выводы?
Статистика-то актуальная?
15 ноя 07, 11:24    [4919454]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CBO  [new]
evostr
Member

Откуда: Екатеринбург
Сообщений: 1278
D/S
Мой вопрос безотносительно конкретного запроса. И возникает как раз после всех этих Concepts и иже с ними.

Тогда это разговор ни о чем, но пока обед, можно пару минут поболтать

D/S
Спрошу без лишней воды: CBO выбирает план с наименьшей стоимостью?

Обычно, да.
Но, во-первых, есть некоторые исключения.
Во-вторых, то что считает СВО может не совпадать с тем, что делает механизм выполнения.

D/S
Теперь исходим из того, что выбирает план с наименьшим костом. Тогда почему путем добавления хинта (USE_HASH(T1 T2 T3) в данном случае) нам удается снизить стоимость? Почему CBO сам не находит такой путь, что ему мешает? Вернее, почему он его все же поступает верно и отвергает его (реальное время выборки по данному запросу сильно проседает)?

Какая точная версия Oracle? Управление pga автоматическое? Системная статистика собрана?

D/S
Данная просьба не проигнорирована, просто не вижу смысла заниматься обструфикацией кода, когда не вижу смысла в его приведении. Если в данном случае это критично - приведу запрос и планы.

Хотелось бы все же увидеть запрос и планы.
15 ноя 07, 11:34    [4919556]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CBO  [new]
Я и ёжик
Member

Откуда: СПб
Сообщений: 1815
D/S
Теперь исходим из того, что выбирает план с наименьшим костом. Тогда почему путем добавления хинта (USE_HASH(T1 T2 T3) в данном случае) нам удается снизить стоимость?


Например, у вас включен режим first_rows или hash join выключен и не рассматривается по умолчанию ( _hash_join_enabled = false ).

Менее вероятна какая либо бага или специальный случай.

В общем случае (если забыть про use_hash) ряд планов может просто не рассматриваться, например до 10-ки такие преобразования как view merging или subqery unnesting, сначала проводились ( если возможно), а только потом рассчитывалась стоимостть, соответственно планы до преобразования не рассматривались.
Если хинтами вы запрещаете преобразование или наоборот инициируете его, то этим вы можете включить в рассмотрение другой набор планов, и соответственно некоторые из них могут иметь меньшую стоимость чем раньше.

Кроме того некоторые хинты могут менять расчитанную кардинальность выборки на каком то шаге или другие характеристики соответственно может меняться и стоимость (например CARDINALITY, FIRST_ROWS(n)).

Ну и есть ряд специальных случаев, например c bitmap индексами, может в некоторых случаях взяться план с большим числом индексов не смотря на его большую стоимость.
15 ноя 07, 11:41    [4919620]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CBO  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
D/S
Удивляет то, что без использования хинтов Cost запроса выше, чем при их добавлении. Выходит, что оптимизатор для этого запроса не может выбрать оптимальный на его взгляд план? Ведь оптимальным он считает тот, который обладает наименьшей стоимостью?

Oracle9i
Database Performance Tuning Guide and Reference
Release 2 (9.2)
October 2002
Part No. A96533-02
Choosing an Optimizer Approach and Goal
---------------------------------------
By default, the goal of the CBO is the best throughput. This means that it chooses
the least amount of resources necessary to process all rows accessed by the
statement. Oracle can also optimize a statement with the goal of best response time.
This means that it uses the least amount of resources necessary to process the first
row accessed by a SQL statement.
Для начала определите цель оптимизации - best throughput или best response time.
15 ноя 07, 11:42    [4919625]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CBO  [new]
DВА
Member

Откуда:
Сообщений: 5439
а чего гадать-то ?
трейс 10053 в зубы и вперед - смотрим, где СВО ступил... или не ступил.
15 ноя 07, 11:47    [4919668]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CBO  [new]
D/S
Member

Откуда:
Сообщений: 55
Я и ёжик

Например, у вас включен режим first_rows или hash join выключен и не рассматривается по умолчанию ( _hash_join_enabled = false ).

Проверил, параметры "в норме".
Я и ёжик
Ну и есть ряд специальных случаев, например c bitmap индексами, может в некоторых случаях взяться план с большим числом индексов не смотря на его большую стоимость.

То есть, все же имеем, что наименьший Cost не является безаппеляционным признаком выбора плана? Я сейчас даже не говорю про план, по которому запрос будет реально выполнен - речь просто об EXPLAIN PLAN. Тогда на кой вообще эти цифры, если оптимизатор на них плюет, и принимает конечное решение исходя из чего-то еще?
Я и ёжик

В общем случае (если забыть про use_hash) ряд планов может просто не рассматриваться...

Для 9i это понятно - но в конкретном случае речь о USE_HASH - уж это-то ему наверняка известно ))
Я и ёжик

Кроме того некоторые хинты могут менять расчитанную кардинальность выборки на каком то шаге...

Вот это и есть квинтэссенция удивляющего меня - что мешает оптимизатору, грубо говоря, добавить хинт и получить лучший Cost? Пока понял, что установка некоторых параметров экземпляра может привести к этому... Но проверенные - "в норме"...
15 ноя 07, 12:36    [4920082]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CBO  [new]
D/S
Member

Откуда:
Сообщений: 55
SQL*Plus
Для начала определите цель оптимизации - best throughput или best response time.

Optimizer goal=All Rows
Версия 9.2.0.7.0
15 ноя 07, 12:38    [4920100]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CBO  [new]
х.з.
Member

Откуда:
Сообщений: 765
2 автор

как-то вы не того. :)

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

2. explain_plan - детский сад, вы бы еще про жабу и ctrl+E вспомнили. вам же сказали 10053 и баста

3. оптимизатор не может/должен добавлять хинт - вы хотите чтобы он стратегию выполнения разрабатывал пару лет, а потом выполнял? Хинт это вам (_знающему_данные_) способ сказать(попытаться сказать) о своем знании.

а вот про выполнение с большим cost и сам хотел бы почитать.
15 ноя 07, 12:55    [4920263]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CBO  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
D/S
SQL*Plus
Для начала определите цель оптимизации - best throughput или best response time.
Optimizer goal=All Rows
Версия 9.2.0.7.0
Значит цель оптимизации по умолчанию у вас best throughput
15 ноя 07, 12:58    [4920296]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CBO  [new]
D/S
Member

Откуда:
Сообщений: 55
х.з.

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

:) Конкретика тут в данном случае нужна, ибо она про отличие между фичами 10 и 9.
х.з.

2. explain_plan - детский сад, вы бы еще про жабу и ctrl+E вспомнили. вам же сказали 10053 и баста

То есть, 10053 может выдать другой план? Будет ли это реальный план выполнения, или опять предполагаемый, как и в случае explain_plan?
15 ноя 07, 13:04    [4920344]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CBO  [new]
D/S
Member

Откуда:
Сообщений: 55
SQL*Plus
Значит цель оптимизации по умолчанию у вас best throughput

Да,я в курсе :)
15 ноя 07, 13:04    [4920354]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CBO  [new]
evostr
Member

Откуда: Екатеринбург
Сообщений: 1278
х.з.
а вот про выполнение с большим cost и сам хотел бы почитать.

Про случай с bitmap index есть у Льюиса в "Основы стоимостной оптимизации". Глава 8
15 ноя 07, 13:11    [4920412]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CBO  [new]
Я и ёжик
Member

Откуда: СПб
Сообщений: 1815
D/S

То есть, все же имеем, что наименьший Cost не является безаппеляционным признаком выбора плана? ... Тогда на кой вообще эти цифры, если оптимизатор на них плюет, и принимает конечное решение исходя из чего-то еще?

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

D/S

Вот это и есть квинтэссенция удивляющего меня - что мешает оптимизатору, грубо говоря, добавить хинт и получить лучший Cost?

Оптимизатор не занимается добавлением хинтов, он просто рассматривает разрешенные и допустимые по его мнению планы, при этом у него есть ограничение по времени, и в рассмотрение невсегда попадает все ( это касается в основном большого числа таблиц и вариантов их соединения).
Хотя в режиме "расширеной" оптимизации может добавить и хинты (sql_profile), но это уже несколько другое.

Рассматривался или нет планы с нужными HASH JOIN и какие параметры оптимизации участвовали, можно посмотреть по event 10053
A Look Under the Hood of CBO: The 10053 Event Wolfgang Breitling, Centrex Consulting Corporation
15 ноя 07, 13:14    [4920426]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CBO  [new]
D/S
Member

Откуда:
Сообщений: 55
Я и ёжик
Помоему у вас с логикой хреново. "Тогда накой вообще эти светофоры и знаки,если автомобиль с включенными спецсигналами и синим проблесковым маячком на них плюет, и может проезжать на красный свет".

ОК, тогда поясните, какая в данном случае мне польза от этой конечной цифры коста? Оптимизатор на нее, мягко говоря, и сам плюёт...
Я и ёжик

Оптимизатор не занимается добавлением хинтов, он просто рассматривает разрешенные и допустимые по его мнению планы, при этом у него есть ограничение по времени, и в рассмотрение невсегда попадает все ( это касается в основном большого числа таблиц и вариантов их соединения).

Хинт и приводит к одному из "допустимых планов выполнения запроса". Разве не так? Что мешает оптимизатору найти его, если он-таки соглашается (меньшей стоимостью запроса с хинтом) с этим планом. Про анализ не всех возможных планов - у того же упомянутого Льюиса есть пример, где при >9 таблицах в запросе анализируются порядка 10% возможных планов. Но здесь три таблицы...
Я и ёжик

Рассматривался или нет планы с нужными HASH JOIN и какие параметры оптимизации участвовали, можно посмотреть по event 10053

Трейс позволяет просмотреть планы, которые анализировал оптимизатор? ОК, не знал - посмотрю.
15 ноя 07, 13:49    [4920696]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CBO  [new]
Я и ёжик
Member

Откуда: СПб
Сообщений: 1815
D/S
ОК, тогда поясните, какая в данном случае мне польза от этой конечной цифры коста?

Да она в общем то не для вас :).

D/S

Хинт и приводит к одному из "допустимых планов выполнения запроса". Разве не так? Что мешает оптимизатору найти его, если он-таки соглашается (меньшей стоимостью запроса с хинтом) с этим планом.
Мы пока этого не видели, нет не только воспроизводимого примера, но даже просто демонстрации с планами, и гадать на кофейной гуще вы чего то не договариваете, глюк оптимизатора или это какой то специальный случай, не вижу смысла. Создайте SR, там вам объяснят.
15 ноя 07, 14:07    [4920796]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить