Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Как зафиксировать "внутренний" план выполнения у VIEW

170 views
Skip to first unread message

Sergey Zaytsev

unread,
Jul 10, 2007, 1:57:47 AM7/10/07
to
Hi All,

Oracle 10.2.0.3
Используется трехуровневая система с сервером приложений, базирующемся
на Oracle. В сервере приложений есть свой урезанный вариант SQL,
который транслируется в Оракловый SQL, допускающий достаточно
ограниченное количество возможностей. Единственный способ
как-то настраивать запросы - это использовать свои VIEW, с хорошо
настроенным планом выполнения. Беда в том, что когда получается
итоговый запрос, содержащий JOIN'ы с моии VIEW и Оракл начинает его
выполнять (у меня есть возможность увидеть "результирующий" запрос
к Оркаклу) весь мой вылизанный план для VIEW может изменится и
скорость выполнения катастрофически падает. Можно ли как-нибудь в плане
запроса (такие инструкции сервер приложений тоже пропускает) или при
создании VIEW сказать: все что хочешь крути, а план для запроса VIEW
не трогай!

С уважение, Сергей Зайцев.

Oleg Vershinin

unread,
Jul 10, 2007, 2:41:33 AM7/10/07
to
"Sergey Zaytsev" <ser...@kazna.ru> writes:

> скорость выполнения катастрофически падает. Можно ли как-нибудь в плане
> запроса (такие инструкции сервер приложений тоже пропускает) или при
> создании VIEW сказать: все что хочешь крути, а план для запроса VIEW
> не трогай!

См. хинт NO_MERGE, а также прочие хинты из

B19306_01/server.102/b14211/hintsref.htm

16.1.2.3 Hints for Query Transformations

--
Oleg Vershinin

Denis Zaitsev

unread,
Jul 10, 2007, 4:08:35 AM7/10/07
to
Приветствую тебя, Sergey!

В ответ на твое письмо от 10 Jul 07:

SZ> запроса (такие инструкции сервер приложений тоже пропускает) или при
SZ> создании VIEW сказать: все что хочешь крути, а план для запроса VIEW
SZ> не трогай!

может глянуть в сторону outline?

Искренне ваш.

Alexander Dubrovsky

unread,
Jul 10, 2007, 1:45:52 PM7/10/07
to
Hello Denis!

13:08, 10 Июля 2007. Ты взглянул(а) на Sergey Zaytsev и сказал(а):


А вы уверены, что умнее оптимизатора ораклового?
В 10-ке есть визарды, которые позволяют выловить долгоиграющие запросы и
оттюнить их.

Чем меньше хинтов и больше индексов, тем круче оптимизатор отрабатывает.
Только статистику по объектам и системную собирай вовремя.

Good bye Denis. [Posted by FBI pack]

Sergey Zaytsev

unread,
Jul 11, 2007, 4:50:07 AM7/11/07
to
>> скорость выполнения катастрофически падает. Можно ли как-нибудь в плане
>> запроса (такие инструкции сервер приложений тоже пропускает) или при
>> создании VIEW сказать: все что хочешь крути, а план для запроса VIEW
>> не трогай!

OV> См. хинт NO_MERGE, а также прочие хинты из

Хинты уже практически все перепробовал, вроде помогает NO_USE_MERGE
(я так понимаю, десяточный вариант/аналог NO_MERGE), но пока уверенности
нет. Запрос вроде нормально по скорости заработал, но местами ведет себя
довольно странно...

Но все равно спасибо за совет.

С уважение, Сергей Зайцев.

Sergey Zaytsev

unread,
Jul 11, 2007, 4:53:39 AM7/11/07
to
SZ>> запроса (такие инструкции сервер приложений тоже пропускает) или при
SZ>> создании VIEW сказать: все что хочешь крути, а план для запроса VIEW
SZ>> не трогай!

DZ> может глянуть в сторону outline?

stored outline в общем конечно вариант, только предугадать и описать
все варианты связок моего VIEW в формируемых Application-сервера, к тому-же
поймать их в рабочее время сложно, а во время тестирования всех вариантов
не просчитать :-(

С уважение, Сергей Зайцев.

Sergey Zaytsev

unread,
Jul 11, 2007, 4:58:47 AM7/11/07
to
AD> А вы уверены, что умнее оптимизатора ораклового?
Не всегда, но бывает. Долгоиграющие запросы иногда ускоряю до 100 раз.

AD> В 10-ке есть визарды, которые позволяют выловить долгоиграющие запросы и
AD> оттюнить их.
Подскажите плиз где эти визарды спрятаны, буду благодарен.

AD> Чем меньше хинтов и больше индексов, тем круче оптимизатор отрабатывает.
К сожалению на хинты во VIEW он похоже порой плюет, а жаль... Создавать
индексы по каждому чиху дело неблагодарное, может стать только хуже... Да
в принципе и есть они, только оптимизатор их использовать не хочет, а
запретить использовать HASH_JOIN и использовать USE_NL почему-то не удается.

С уважение, Сергей Зайцев.

Andrey Bоgdanov

unread,
Jul 11, 2007, 11:07:58 AM7/11/07
to
Wed Jul 11 2007 13:58, Sergey Zaytsev wrote to Alexander Dubrovsky:

SZ> К сожалению на хинты во VIEW он похоже порой плюет, а жаль... Создавать
SZ> индексы по каждому чиху дело неблагодарное, может стать только хуже...
SZ> Да
SZ> в принципе и есть они, только оптимизатор их использовать не хочет, а
SZ> запретить использовать HASH_JOIN и использовать USE_NL почему-то не
SZ> удается.

Иногда HASH_JOIN действительно лучше, чем USE_NL. Hу а для того, чтобы понять
почему Oracle вибирает тот или иной план, полезно хотя бы один раз взять и
руками посчитать стоимость запроса по двум сравниваемым планам. Сразу станет
понятно какие параметры и где используются. И какие из них подкрутить надо.

Решайте головоломки http://diogen.h1.ru

Тарасенко И.О.

unread,
Jul 11, 2007, 11:16:11 PM7/11/07
to
> stored outline в общем конечно вариант, только предугадать и описать
> все варианты связок моего VIEW в формируемых Application-сервера, к тому-же
> поймать их в рабочее время сложно, а во время тестирования всех вариантов
> не просчитать :-(

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


Sergey Zaytsev

unread,
Jul 12, 2007, 12:26:36 AM7/12/07
to
SZ>> К сожалению на хинты во VIEW он похоже порой плюет, а жаль... Создавать
SZ>> индексы по каждому чиху дело неблагодарное, может стать только хуже...
SZ>> Да
SZ>> в принципе и есть они, только оптимизатор их использовать не хочет, а
SZ>> запретить использовать HASH_JOIN и использовать USE_NL почему-то не
SZ>> удается.

AB> Иногда HASH_JOIN действительно лучше, чем USE_NL. Hу а для того, чтобы
AB> понять почему Oracle вибирает тот или иной план, полезно хотя бы один раз
AB> взять и руками посчитать стоимость запроса по двум сравниваемым планам.
AB> Сразу станет понятно какие параметры и где используются. И какие из них
AB> подкрутить надо.

Про то, что HASH_JOIN бывает лучше я знаю. Но в моем конкретном случае он
НАМНОГО медленней. Возможно Оракл и считает такой вариант дешевле, но на
практике он работает в разы (десятки раз) медленнее. Так что я бы предпочел
средства, которые позволяли бы мне самому указывать план выполнения. В 10-ке
слышал появилось что-то помощнее и поудобнее outline, не подскажете, где
про это почитать можно?

С уважение, Сергей Зайцев.

Sergey Zaytsev

unread,
Jul 12, 2007, 7:35:34 AM7/12/07
to
OV> См. хинт NO_MERGE, а также прочие хинты из

А хинт NO_MERGE все-таки оказался тем. что нужно. NO_USE_MERGE все равно
позволял "дробить" план VIEW, а с NO_MERGE все заработало как надо.
Большое спасибо!

С уважение, Сергей Зайцев.

Alexander Dubrovsky

unread,
Jul 12, 2007, 12:57:06 PM7/12/07
to
Hello Sergey!

12:58, 11 Июля 2007. Sergey Zaytsev взглянул(а) на меня и сказал(а):

SZ> Подскажите плиз где эти визарды спрятаны, буду благодарен.

Hу в энтерпрайз менеджере надо тыкать в адвайзерах - там в 10-ке чего только
не наворочали.
Щас не вспомню так.

Good bye Sergey. [Posted by FBI pack]

0 new messages