Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Запрос Java через Hybernate в какой-то момент перестает использовать передаваемыепараметры / 11 сообщений из 11, страница 1 из 1
23.01.2017, 13:29
    #39389473
expimp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос Java через Hybernate в какой-то момент перестает использовать передаваемыепараметры
Простой запрос

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select 
    count(order_id) 
from 
    tab_order
where 
        contract_number = :p1
    and creation_date > to_date(:p3);

Интервал, рассматриваемый запросом, должен быть 10 минут.
Выполнение мгновенное. Затраты ничтожны.
Вдруг, я обнаруживаю этот запрос на первом месте с большим отрывом по CPU и buffer_gets
через v$sql.

Понимаю, что в какой-то момент передача параметров "залипла".
И запрос продолжает выполнятья с какой-то, давно прошедшей датой и contract_number.
Написал удобочитаемый запрос к v$sql_bind_capture и течении недели регулярно нажимаю Enter

Вот до 14 января все было нормально, а потом "залипло"
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
WATCH_TIME  CATCH_TIME     PARAM_NAME      VALUE              
----------- -------------- --------------- --------------------
13.01 17:56 13.01 17:46:55 TIME POINT      13.01.2017 17.36.56 
                           CONTRACT_NUMBER 218886523           

WATCH_TIME  CATCH_TIME     PARAM_NAME      VALUE             
----------- -------------- --------------- -------------------
14.01 19:11 14.01 19:07:47 TIME POINT      14.01.2017 18.57.47
                           CONTRACT_NUMBER 229176064          
 
WATCH_TIME  CATCH_TIME     PARAM_NAME      VALUE             
----------- -------------- --------------- -------------------
15.01 13:33 15.01 13:33:40 TIME POINT      14.01.2017 22.28.11
                           CONTRACT_NUMBER 126333506          
 
WATCH_TIME  CATCH_TIME     PARAM_NAME      VALUE             
----------- -------------- --------------- -------------------
16.01 13:58 16.01 13:58:03 TIME POINT      14.01.2017 22.28.11
                           CONTRACT_NUMBER 126333506

WATCH_TIME  CATCH_TIME     PARAM_NAME      VALUE             
----------- -------------- --------------- -------------------
17.01 10:59 17.01 10:59:16 TIME POINT      14.01.2017 22.28.11
                           CONTRACT_NUMBER 126333506

WATCH_TIME  CATCH_TIME     PARAM_NAME      VALUE             
----------- -------------- --------------- -------------------
18.01 10:37 18.01 10:37:35 TIME POINT      14.01.2017 22.28.11
                           CONTRACT_NUMBER 126333506

WATCH_TIME  CATCH_TIME     PARAM_NAME      VALUE             
----------- -------------- --------------- -------------------
19.01 16:14 19.01 16:14:58 TIME POINT      14.01.2017 22.28.11
                           CONTRACT_NUMBER 126333506          

Ситуация воспроизводима.
т.е. Было обновление системы - перезапуск.
Несколько дней работало нормально.
Потом затык.
Джависты смотрял логи своего приложения и клянутся, что параметры передаются обновленные, правильные.

Пока пытался пронизать эту загадку вселенной, наткнулся на подобный, простенький запрос с count(*).
Только к другой таблице.
И тоже висит.

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

>>> Но сам вопрос остается - в чем может быть дело?!<<<
...
Рейтинг: 0 / 0
23.01.2017, 14:03
    #39389494
artas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос Java через Hybernate в какой-то момент перестает использовать передаваемыепараметры
expimp,

мне кажется проблема на стороне приложение. При чем очень сомневаюсь что хибернейт виноват
...
Рейтинг: 0 / 0
23.01.2017, 14:24
    #39389513
expimp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос Java через Hybernate в какой-то момент перестает использовать передаваемыепараметры
artasexpimp,

мне кажется проблема на стороне приложение. При чем очень сомневаюсь что хибернейт виноват

Так приложенщики показывают мне логи - и я им верю, естественно, - что параметры на вход в Java подаются правильные.
Ну, не могу же я подозревать сам Oracle.
)
...
Рейтинг: 0 / 0
23.01.2017, 14:29
    #39389518
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос Java через Hybernate в какой-то момент перестает использовать передаваемыепараметры
expimpТак приложенщики показывают мне логи -
)
Логи чего? JDBC драйвера, надеюсь?
...
Рейтинг: 0 / 0
23.01.2017, 16:35
    #39389646
expimp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос Java через Hybernate в какой-то момент перестает использовать передаваемыепараметры
Сергей АрсеньевexpimpТак приложенщики показывают мне логи -
)
Логи чего? JDBC драйвера, надеюсь?

Оказалось, мы не правильно друг-друга поняли.
Как я их понимал, что у них есть длинная простыня, где зафиксированы все параметры
вместе с их таймстемпами, которые передавались на сервер DB.
Не, ничего нет!

Правда, теперь, слава богу, они не грешат, мол это Oracle "чё-то".
Уточнил, что для этого запроса Хибернейт не используется.

теперь просят, чтобы я уточнил, с какого сервера приложений идет эта ботва (у нас их 18).
Подозревают, что проблемы только на одном.
Но вряд ли.

Ищу советов.
...
Рейтинг: 0 / 0
23.01.2017, 16:53
    #39389668
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос Java через Hybernate в какой-то момент перестает использовать передаваемыепараметры
expimpНаписал удобочитаемый запрос к v$sql_bind_capture и течении недели регулярно нажимаю Enter

V$SQL_BIND_CAPTURE
Bind data

One of the bind values used for the bind variable during a past execution of its associated SQL statement. Bind values are not always captured for this view . Bind values are displayed by this view only when the type of the bind variable is simple (this excludes LONG, LOB, and ADT datatypes) and when the bind variable is used in the WHERE or HAVING clauses of the SQL statement.
...
Рейтинг: 0 / 0
23.01.2017, 16:57
    #39389672
artas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос Java через Hybernate в какой-то момент перестает использовать передаваемыепараметры
expimp,

сервер приложений в v$session виден
...
Рейтинг: 0 / 0
23.01.2017, 17:27
    #39389697
expimp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос Java через Hybernate в какой-то момент перестает использовать передаваемыепараметры
artasexpimp,

сервер приложений в v$session виден

Конечно.
Только запрос выполняется сотни тысяч раз.
Никакого шедулера у меня на ПРОДе нет - нет прав.
Только нажимать на Enter каждую секунду.
Но рука устанет.
Беда в том, что v$sql_bind_capture записывается раз в 15 минут.
Поэтому, у меня тем более не может быть четкого, доказательного соответствия,
что ботва идет с одного сервера или с разных.
Правда, в v$sql_bind_capture я всегда вижу только один набор. Тот, который неправильный.
Других нет.

Ну у разработчиков других идей нет - покажи нам, с какого сервера, и все тут!
)
...
Рейтинг: 0 / 0
23.01.2017, 17:32
    #39389704
expimp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос Java через Hybernate в какой-то момент перестает использовать передаваемыепараметры
Андрей ПанфиловexpimpНаписал удобочитаемый запрос к v$sql_bind_capture и течении недели регулярно нажимаю Enter

V$SQL_BIND_CAPTUREBind data

One of the bind values used for the bind variable during a past execution of its associated SQL statement. Bind values are not always captured for this view . Bind values are displayed by this view only when the type of the bind variable is simple (this excludes LONG, LOB, and ADT datatypes) and when the bind variable is used in the WHERE or HAVING clauses of the SQL statement.



Спасибо!
Но наш запросик по всем параметрам подходит для отслеживания.
Тем более, что сначала мы видим, что все хорошо - данные меняются.
А потом все плохо - висим.
И так повторяется после перезапуска.

Перехват параметров просто подтверждает, что у нас беда, что дата залипла.
А что дата залипла, видно по линейно увеличивающемуся потреблению ЦПУ.
Все согласуется.
...
Рейтинг: 0 / 0
24.01.2017, 04:24
    #39389986
SeaGate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос Java через Hybernate в какой-то момент перестает использовать передаваемыепараметры
expimp,

Планов нет, но по описанию это классические out-of-range предикаты.
Системное исправление в разделе Preventing "out of range" condition Best Practices for Gathering Optimizer Statistics with Oracle Database 12c
Если текст постоянный, по-быстрому можно SQL Plan Baseline создать, используя приемлемый план из AWR/shared pool, если есть. Если нет, то выполнить с нужным планом и загрузить в baseline.
...
Рейтинг: 0 / 0
24.01.2017, 09:32
    #39390036
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос Java через Hybernate в какой-то момент перестает использовать передаваемыепараметры
expimpИщу советов.
Ну как определилось - включить трассировку сессий. На предмет реальных параметров.
Так же, если есть возможность, то включить логгирование на уровне JDBC драйвера.
Можно тоже динамически - дернул за рубильник началась запись.
Правда будет проседание основного приложения.

По хорошему - нужен стенд на котором все воспроизводится. :)
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Запрос Java через Hybernate в какой-то момент перестает использовать передаваемыепараметры / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]