powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Поиск причины периодических "тормозов"
7 сообщений из 7, страница 1 из 1
Поиск причины периодических "тормозов"
    #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
Поиск причины периодических "тормозов"
    #38095753
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скороход,

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

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

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

Ну и есть другие причины, почему ваша проверка select-а снаружи могла ничего не показать.
...
Рейтинг: 0 / 0
Поиск причины периодических "тормозов"
    #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
Поиск причины периодических "тормозов"
    #38096624
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скороход
Код: plsql
1.
WHERE t1.id= wwv_flow.g_x01;


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

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

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

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


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