Гость
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Поиск причины периодических "тормозов" / 7 сообщений из 7, страница 1 из 1
27.12.2012, 21:40
    #38095489
Скороход
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск причины периодических "тормозов"
Добрый день.
Есть страница со списком позиций, в каждой - ссылка на открытие модального окна (окно на bootstrap-modal). При открытии окна загружаются данные позиции. Выполняется следующий код (все названия переменных изменены):

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
function getOrderInfo(id) {
 var getOrderInfoProcess = new htmldb_Get(null,$v('pFlowId'),'APPLICATION_PROCESS=GET_ORDER_INFO',$v('pFlowStepId'));  
 getOrderInfoProcess.addParam('x01',id);
 getOrderInfoProcess.GetAsync(function() {
               if (p.readyState == 2) {
               $('#OrderInfoModal').modal('show'); 
               }
               else if (p.readyState == 4) {
               $('#OrderInfoModalBody').html(p.responseText);               
               }
                                         } );  
}



Процесс GET_ORDER_INFO:

DECLARE
v_info1 VARCHAR2(300);
v_info2 NUMBER;

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
BEGIN
SELECT 
  info1,
  info2
  INTO v_info1,
         v_info2
  FROM 
  order
  WHERE id= wwv_flow.g_x01;
htp.p('<div><p><b>'||v_info1||'</b></p></div>');
htp.p('<div><img src="order_image?order_id='||wwv_flow.g_x01||'"></div>');
htp.p('<div><p>'||v_info2||'</p></div>');
END;



Проблема в том, что при обращении к приложению по сети примерно в 2 случаях из 3 wwv_flow.show отрабатывает аж 4-5 секунд, что для системы является практически неприемлемым :(. Если вызывать данные по одной и той же позиции подряд - второй раз вроде бы всегда быстро (менее секунды). Если запустить браузер на самом сервере, работает всегда быстро (0,3 - 0,5 секунды).
Убирая вызов картинки, ничего не добились.
SELECT проверили со всех сторон - дольше, чем 0,8 секунды не выполнялся, да и план там весьма простой.
Если в процессе вместо селекта сделать статическое htp.p('Бла-бла');, то работает всегда быстро.
Возникло параноидальное впечатление, что на каком-то этапе сетевого обмена время уходит на анализ трафика (ведь повторно одно и то же быстро всегда!). Или у APEX процессов есть некий кэш?
В логах листенера ошибок нет. Может, можно сделать некую трассировку? Подскажите, куда копать.

Windows 2003
Oracle 10.2.0.5
APEX Listener 2.0 EA
Application Express 4.2.0.00.27
...
Рейтинг: 0 / 0
28.12.2012, 09:47
    #38095753
SvDev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск причины периодических "тормозов"
Скороход,

APEX_DEBUG_MESSAGE.LOG_MESSAGE до и после, проверяется, являются ли тормоза внутри процесса или где-то еще.
Если тормозит внутри, хотите помощи, привидите реальный селект (например, планы могут различаться внутри апекса и снаружи по различным причинам). Либо еще может тормозить яваскрипт в браузере, тоже легко проверяется в сетевом мониторе. Если нет, делайте трассировку сессии.
...
Рейтинг: 0 / 0
28.12.2012, 10:15
    #38095783
SvDev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск причины периодических "тормозов"
Скороход,

Вообще по привиденным огрызкам селекта даже помогать не хочется.

Например, могут присутствовать замены substitution, типа &SESSION., они подставляются в запрос статически, каждый раз будет строиться новый план, был случай, когда запрос выполняющийся за 0.1 секунды тормозил на 1.5 секунды из-за этого.

Ну и есть другие причины, почему ваша проверка select-а снаружи могла ничего не показать.
...
Рейтинг: 0 / 0
28.12.2012, 19:25
    #38096593
Скороход
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск причины периодических "тормозов"
Спасибо. Один вопрос - как дебажить приложение с кастомной аутентификацией? Если я запускаю его из среды, залогинившись под девелопером, то после логина в приложении сессия в среде, видимо, "убивается". В итоге панели с кнопкой debug не видно.
Если бы тормозил запрос, то и в браузере на сервере хоть иногда, но тормозило бы, или я неправильно представляю? В любом случае, запрос примитивен:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT
fre1.get_lists(t1.list),
round(v1.info1),
round(v1.info2),
v1.info3
FROM
fre1.order_variant t1
LEFT JOIN fre1.view_order_var_calc v1 ON v1.variant_id=t1.id
LEFT JOIN fre1.order_pattern t2 ON t2.id = t1.order_pattern_id
WHERE t1.id= wwv_flow.g_x01;


Все, в этом запросе больше нет ничего. 2 таблицы, одно представление с примитивной арифметикой, условие по wwv_flow.g_x01, 2 округляющихся поля Number, одно varchar2 и функция get_lists, принимающая в качестве аргумента поле Number первой таблицы.
...
Рейтинг: 0 / 0
28.12.2012, 20:09
    #38096624
SvDev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск причины периодических "тормозов"
Скороход
Код: plsql
1.
WHERE t1.id= wwv_flow.g_x01;


Оракл такое кушает разве?

при проверке запроса установите одинаковые nls session parameters, что и в апексе
+ явное преобразование типов везде
+ трассировка сессии

Скороходто после логина в приложении сессия в среде, видимо, "убивается"
Опция должна быть включена в app definition, этого достаточно. Или может быть с кукисами в настройках еще что-нибудь перенаворотили?

СкороходЕсли бы тормозил запрос, то и в браузере на сервере хоть иногда, но тормозило бы, или я неправильно представляю?
Мало ли, может там аякс не работает или кешируется как раз, или представления какие-нибудь системные используются, в которых эти данные как раз зависимы и т.д.
...
Рейтинг: 0 / 0
29.12.2012, 15:16
    #38097277
Скороход
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск причины периодических "тормозов"
Сделали приведение типов везде. Победили невключавшийся дебаг.
Запрос выполняется очень стабильно, примерно 0,26 секунды. Картина на стороне клиента при этом может быть такой, как на картинке... а может и не быть.
Озадачили сетевиков.
Возможно как-то оттрассировать работу apex_listener?
...
Рейтинг: 0 / 0
03.01.2013, 03:14
    #38099059
suPPLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск причины периодических "тормозов"
СкороходВозможно как-то оттрассировать работу apex_listener?
http://<host>:<port>/apex/listenerAdmin :
- Pre-Post Processing — можно вписать процедуры, которые будут выполняться до и после каждого обращения к БД;
- Status — информация о работе. В Logging в порядке устаревания идут записи о времени обработки каждого запроса (БД, прослушиватель).
...
Рейтинг: 0 / 0
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Поиск причины периодических "тормозов" / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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