Re[2]: Oracle еше одна проблема. чтоб им.
От: wildwind Россия  
Дата: 28.04.15 17:15
Оценка:
Здравствуйте, зиг, Вы писали:

зиг> мне нужен совет — в каком направлении пнуть наших DBA которые базу майнтейнят. может быть тут очевидная какая-то недоработка с их стороны?


Я знаю, что вам ответят админы на любой пинок. "На продакшене нормально выполняется? Нормально. К пуговицам претензии есть? Нет. А девелопменте, ясен пень, железо не такое мощное. Скажи спасибо, что второй раз быстро выполняется."

зиг> если б хотя бы план отображал действительную картину — тогда было бы уже легче инвестигировать. то есть я так понимаю проблему надо начинать решать с этой стороны?


Есть способы получить и действительную картину. Но для этого нужно Кайта читать.

В общем, если пользователи и DBA на этот запрос не жалуются — забейте/потерпите.
avalon/1.0.442
Re[4]: Oracle еше одна проблема. чтоб им.
От: wildwind Россия  
Дата: 28.04.15 17:15
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ> Про OR-ы в JOIN-ах вам тоже правильно сказали -- безобразие.

MZ> Надо их убирать. Проверяешь условие (на PL/SQL), и выполняешь такой запрос или другой.
MZ> Или генерация кода запроса в виде текста и EXECUTE IMEDIATE.

Вот вредных советов не надо сходу давать.
avalon/1.0.442
Re[3]: Oracle еше одна проблема. чтоб им.
От: Softwarer http://softwarer.ru
Дата: 28.04.15 20:33
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ> Также строковые литералы дат нужно оборачивать в to_date( но это к производительности не относится)


Гораздо лучше обернуть их в константы. Типа

cf.VAL_DATE = DATE '2015-04-27'


Это если мы не говорим про нормальные байнды, конечно.
Re[5]: Oracle еше одна проблема. чтоб им.
От: TMU_1  
Дата: 29.04.15 06:59
Оценка:
MZ>>cost лучше вообще не смотреть, я напр. даже не знаю, в каких попугаях он мериится.
MZ>>Смотреть надо на cardinality.
зиг>а как сделать чтоб кардиналити выводился?
зиг>пользуюсь pl/sql developer.



Ну тогда в окошке Explain Plan должна быть такая кнопочка с гаечным ключом — Preferences. Там все настраивается, какие значения выводить, какие нет.
Гуру, кстати, до сих по не упомянули вот какую вещь: oracle, вообще-то, не гарантирует, что реальный план выполнения запроса будет именно такой, который выдан в результате explain plan.
Окончательный диагноз дает только вскрытие Трассу надо снимать, обрабатывать tkprof и смотреть — вот там вся правда
Иногда бывают дивные отличия от explain plan.
Но это колдунство потребует чтения книжки или документации, скорее всего.
Re: Oracle еше одна проблема. чтоб им.
От: AVAKON  
Дата: 01.05.15 10:05
Оценка: 1 (1)
Здравствуйте, зиг,

А попробуй код, без которого все летает вынести в самый верх, туда где select B.*. Там же ограничение на вывод 30 строк идет, зачем находить максимальное значение (ASOF) целиком для всех строк? Там где сейчас ASOF вычисляется просто оставь p.PKEY, чтобы по нему уже вверху вычислить ASOF.
Re: Oracle еше одна проблема. чтоб им.
От: AVAKON  
Дата: 01.05.15 10:07
Оценка:
Здравствуйте, зиг,

А попробуй код, без которого все летает вынести в самый верх, туда где select B.*. Там же ограничение на вывод 30 строк идет, зачем находить максимальное значение (ASOF) целиком для всех строк? Там где сейчас ASOF вычисляется просто оставь p.PKEY, чтобы по нему уже вверху вычислить ASOF.
Re[2]: Oracle еше одна проблема. чтоб им.
От: зиг Украина  
Дата: 01.05.15 11:19
Оценка:
Здравствуйте, AVAKON, Вы писали:

AVA>Здравствуйте, зиг,


AVA>А попробуй код, без которого все летает вынести в самый верх, туда где select B.*. Там же ограничение на вывод 30 строк идет, зачем находить максимальное значение (ASOF) целиком для всех строк? Там где сейчас ASOF вычисляется просто оставь p.PKEY, чтобы по нему уже вверху вычислить ASOF.


ха! верной дорогой идете товарищи! до этого я уже сама додумалась и сделала, и запрос действительно стал летать.
НО, проблема остается если мы делаем не первые 30 строк, а все допустим, или, если по этому значению asof нам нужно фильтровать либо сортировать. тогда его выносить наружу никак нельзя.
Re[3]: Oracle еше одна проблема. чтоб им.
От: AVAKON  
Дата: 01.05.15 12:58
Оценка:
Здравствуйте, зиг, Вы писали:

зиг>Здравствуйте, AVAKON, Вы писали:


AVA>>Здравствуйте, зиг,


AVA>>А попробуй код, без которого все летает вынести в самый верх, туда где select B.*. Там же ограничение на вывод 30 строк идет, зачем находить максимальное значение (ASOF) целиком для всех строк? Там где сейчас ASOF вычисляется просто оставь p.PKEY, чтобы по нему уже вверху вычислить ASOF.


зиг>ха! верной дорогой идете товарищи! до этого я уже сама додумалась и сделала, и запрос действительно стал летать.

зиг>НО, проблема остается если мы делаем не первые 30 строк, а все допустим, или, если по этому значению asof нам нужно фильтровать либо сортировать. тогда его выносить наружу никак нельзя.

А план, который ты кусочек прислала, он ведь уже выполнен после переброса ASOF вверх? Судя по нему это значение рассчитывается именно для 30 строк, а не для всей выборки. Может есть смысл использовать аналитику типа max over, материализовать обращение к tablee при помощи with, и потом уже с неё максимумы эти тянуть? Если не будем ограничиваться выборкой 30 строк, то имхо это может помочь. У нас же здесь тормоза, как я понимаю из-за определения этих максимумов...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.