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

Откуда:
Сообщений: 17
Доброе время суток!

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

Далее,

Первый вариант. Процедура выполняется повторно уже с другими параметрами, но при этом подтягивается из кэша старый план, который не оптимален в данном случае, что приводит к очень долгому выполнению запроса.
Как сделать так, чтобы не подтягивался план выполнения запроса, вычисленный для других переменных привязок?
Вижу вариант с execute immediate и динамическим запросом. Но не хотелось бы его использовать т.к. в данной реализации компиляция процедуры не покажет ошибок в данном запросе, которые возможны, например, в случае изменения структуры таблиц запроса.
Можно ли отправить в кэш план выполнения данного запроса без переменных привязок (подставить константы), не используя execute immediate?

Второй вариант. Процедура выполняется повторно с теми же самыми параметрами, но содержимое таблиц запроса существенно поменялось, в следствие чего план выполнения запроса, вычисленный ранее, приведет к очень долгому выполнению запроса. Но этот план опять же подтянется из кэша.
Как сделать так, чтобы в этом случае не подтягивался план выполнения запроса, вычисленный ранее?
Может как-то можно пометить данный запрос? Может хинт какой-то есть?
9 мар 19, 21:57    [21828541]     Ответить | Цитировать Сообщить модератору
 Re: Неправильный план выполнения запроса  [new]
-2-
Member

Откуда:
Сообщений: 14571
Андрей_7777
с другими параметрами
два, три, ... статических запросов с соответствующим набору параметров планом.

Андрей_7777
содержимое таблиц запроса существенно поменялось
Зафиксировать план, удовлетворяющий ограничениям по времени отклика при любом составе данных.
9 мар 19, 22:59    [21828572]     Ответить | Цитировать Сообщить модератору
 Re: Неправильный план выполнения запроса  [new]
Андрей_7777
Member

Откуда:
Сообщений: 17
-2-, Спасибо

-2-
Андрей_7777
с другими параметрами
два, три, ... статических запросов с соответствующим набору параметров планом.

А все-таки как-то можно сделать так, чтобы в план запроса попадали не переменные привязки вида ":B1", а конкретные их значения (без использования execute immediate)? Может хинты какие есть или параметр сессии?

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

Спасибо, изучил материал, но по моему в моей ситуации это слишком сложно, попробую обойтись хинтами.
10 мар 19, 10:00    [21828653]     Ответить | Цитировать Сообщить модератору
 Re: Неправильный план выполнения запроса  [new]
bubuk
Member

Откуда:
Сообщений: 6
Андрей_7777,

Если руки помыл, то попробуй почитать это:

https://blogs.sap.com/2013/06/13/oracle-db-optimizer-part-vi-effects-of-disabled-bind-variable-peeking-adaptive-cursor-sharing-and-cardinality-feedback-on-the-cbo-in-sap-environments/
10 мар 19, 11:44    [21828669]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить