Оракловые чудеса

Аватара пользователя
Uzito
Уже с Приветом
Сообщения: 8239
Зарегистрирован: Ср фев 06, 2002 4:01 am
Откуда: NJ, USA

Оракловые чудеса

Сообщение Uzito »

Продакшен внезапно встал колом, пытаюсь понять что за чудеса. Есть репорт который высасывает данные из вьюшки средней сложности.

Это выполняется из SQL Dev за 10 секунд:

Код: Выделить всё

SELECT *
  FROM v_report_abc
 WHERE condition1 = 'QQQQ' AND condition2 = 'ABC'
Это умирает и не возращает никакого результата даже после 3 часов:

Код: Выделить всё

SELECT field1, field2, field3, field4, field5
  FROM v_report_abc
 WHERE condition1 = 'QQQQ' AND condition2 = 'ABC'
Это опять выполняется нормально:

Код: Выделить всё

SELECT field1, field2, field3, field4, field5
  FROM (SELECT *
          FROM v_report_abc
         WHERE condition1 = 'QQQQ' AND condition2 = 'ABC')
Чо за ботва?
mskmel
Уже с Приветом
Сообщения: 946
Зарегистрирован: Вт сен 24, 2013 12:58 am
Откуда: US\GA

Re: Оракловые чудеса

Сообщение mskmel »

"Доктор, у меня это..."
Описанная Вами ситуация вполне воспроизводима при определённых условиях. То что выполняется нормально - найдено, вот это и выполняйте.
zgur
Уже с Приветом
Сообщения: 329
Зарегистрирован: Пн сен 09, 2002 12:42 pm
Откуда: NH
Контактная информация:

Re: Оракловые чудеса

Сообщение zgur »

Планы запросов нужны чтоб понять точно. Когда в select выбираются только несколько полей oracle делает оптимизацию и, возможно, выбрасывает некоторые таблицы из joinа во view. Эта оптимизация, в вашем случае, приводит к худшим ресультатам
iDesperado
Уже с Приветом
Сообщения: 1349
Зарегистрирован: Пт ноя 28, 2008 11:50 am

Re: Оракловые чудеса

Сообщение iDesperado »

смотри планы запросов. просто разные планы
Аватара пользователя
Uzito
Уже с Приветом
Сообщения: 8239
Зарегистрирован: Ср фев 06, 2002 4:01 am
Откуда: NJ, USA

Re: Оракловые чудеса

Сообщение Uzito »

iDesperado писал(а): Чт мар 15, 2018 10:54 am смотри планы запросов. просто разные планы
План первого и второго запроса совершено одинаковый. :pain1:
Easbayguy
Уже с Приветом
Сообщения: 10633
Зарегистрирован: Чт июл 17, 2003 5:11 pm

Re: Оракловые чудеса

Сообщение Easbayguy »

Попробуйте добавить hint /*+ OPT_PARAM('_optimizer_adaptive_plans', 'false') */ иногда Oracle на лету меняет plan.
Пх'нглуи мглв'нафх Ктулху Р'лайх угахнагл фхтагн
iDesperado
Уже с Приветом
Сообщения: 1349
Зарегистрирован: Пт ноя 28, 2008 11:50 am

Re: Оракловые чудеса

Сообщение iDesperado »

Uzito писал(а): Чт мар 15, 2018 11:05 am
iDesperado писал(а): Чт мар 15, 2018 10:54 am смотри планы запросов. просто разные планы
План первого и второго запроса совершено одинаковый. :pain1:
не верю. делаю ставку что ты смотришь предполагаемый план, а не в процессе исполнения
поставь toad, посмотри план в session browser, там же long operations.
мухобой
Уже с Приветом
Сообщения: 1104
Зарегистрирован: Сб апр 11, 2015 12:10 pm

Re: Оракловые чудеса

Сообщение мухобой »

Скорее всего плохой план, либо менее вероятно запрос может залипнуть на парсинге. Есть и другие более экзотические причины.
Аватара пользователя
Uzito
Уже с Приветом
Сообщения: 8239
Зарегистрирован: Ср фев 06, 2002 4:01 am
Откуда: NJ, USA

Re: Оракловые чудеса

Сообщение Uzito »

iDesperado писал(а): Чт мар 15, 2018 2:09 pm не верю. делаю ставку что ты смотришь предполагаемый план, а не в процессе исполнения
поставь toad, посмотри план в session browser, там же long operations.
AUTOTRACE издох на попытке показать реальный план. Прибил его через два часа.
Аватара пользователя
Uzito
Уже с Приветом
Сообщения: 8239
Зарегистрирован: Ср фев 06, 2002 4:01 am
Откуда: NJ, USA

Re: Оракловые чудеса

Сообщение Uzito »

Easbayguy писал(а): Чт мар 15, 2018 11:49 am Попробуйте добавить hint /*+ OPT_PARAM('_optimizer_adaptive_plans', 'false') */ иногда Oracle на лету меняет plan.
Это не помогло, зато помогло добавить ORDERED hint.
Припаяли этот хинт к сиквелю через SQL Patch.
iDesperado
Уже с Приветом
Сообщения: 1349
Зарегистрирован: Пт ноя 28, 2008 11:50 am

Re: Оракловые чудеса

Сообщение iDesperado »

Uzito писал(а): Чт мар 15, 2018 2:42 pm
iDesperado писал(а): Чт мар 15, 2018 2:09 pm не верю. делаю ставку что ты смотришь предполагаемый план, а не в процессе исполнения
поставь toad, посмотри план в session browser, там же long operations.
AUTOTRACE издох на попытке показать реальный план. Прибил его через два часа.
set autotrace on из sqlplus ? он на сколько я помню после отработки запроса показывает. если есть доступ в вебную админку, там еще реальный план можно увидеть. еще вариант врубить трейс. перед тем как запустить глючный запрос
ALTER SESSION SET sql_trace = TRUE;
или более объемный вариант
ALTER SYSTEM SET EVENTS '10046 trace name context forever, level 8';

найти куда он задампил и трейс через tkprof отформатировать в человеческий вид. ALTER SESSION SET sql_trace = TRUE; мне кажется план показывал
StrangerR
Уже с Приветом
Сообщения: 38016
Зарегистрирован: Чт дек 14, 2006 2:13 pm
Откуда: USA

Re: Оракловые чудеса

Сообщение StrangerR »

Поставьте OEM (или даже db console) и походите по плану, вейтинг событиям, статистике, и быстро все найдете. А так как тут написано, только самые-самые ораклиные гуру могут разобраться.
Аватара пользователя
Mark
Уже с Приветом
Сообщения: 1982
Зарегистрирован: Вт окт 10, 2000 4:01 am
Откуда: New England

Re: Оракловые чудеса

Сообщение Mark »

проше всего запустить STA в OEM (или TOAD) на этот запрос и посмотреть STA report. если написано поменять план или построить индекс - сделать и прогнать еще раз.
Аватара пользователя
Ion Tichy
Уже с Приветом
Сообщения: 13346
Зарегистрирован: Пн дек 06, 2004 10:00 pm
Откуда: Москва->CO
Благодарил (а): 9 раз

Re: Оракловые чудеса

Сообщение Ion Tichy »

Транзакции-изоляции?
Как же это вы без гравицаппы пепелац выкатываете из гаража? Это непорядок...
Аватара пользователя
ALV00
Уже с Приветом
Сообщения: 1494
Зарегистрирован: Пт мар 08, 2002 4:01 am
Откуда: NJ

Re: Оракловые чудеса

Сообщение ALV00 »

Чтобы не плодить топики
Еще одна загадка от Ларри:
Почему из пустого множества получается такой результат?

Код: Выделить всё

SQL> select c1, sum(c2)
  2  from (
  3     select 123 as c1, 10 as c2
  4     from dual
  5     where 1=2
  6  )
  7  /

        C1    SUM(C2)
---------- ----------
       123
Ответить

Вернуться в «Вопросы и новости IT»