Добрый день, веселая минутка. Коллеги, столкнулся с такой проблемой: запрос в EMS и в pgAdmin выполняется быстро (60-100 миллисекунд), а из скрипта PHP неприемлемо долго (3-4 секунды). Замеры в PHP производил функцией microtime. Но она работает криво (уже гуглил - венда зараза глючит). Так что по сути замерял секундомером. Задержек по сети нет - все на локалхосте. Собственно запрос: [sql] WITH RECURSIVE Tmp ("ComponentID","ParentID","Name", LVL, SRT, "Amount","ComponentType",num) AS ( SELECT T1."ComponentID",T1."ParentID", T1."Name", 1, (CASE WHEN T1."ComponentType"=1 THEN 'И-' WHEN T1."ComponentType"=2 THEN 'У-' ELSE 'Д-' END) || TRIM(to_char(T1."Num",'000')), T1."Amount",T1."ComponentType",trim(to_char(T1."Num",'000')) AS num FROM "OrderComponents" AS T1 WHERE (T1."ParentID" = 0) AND (T1."OrderID"=1) UNION SELECT T2."ComponentID", T2."ParentID", T2."Name", LVL + 1, SRT ||'/'|| (CASE WHEN T2."ComponentType"=1 THEN 'И-' WHEN T2."ComponentType"=2 THEN 'У-' ELSE 'Д-' END) || TRIM(to_char(T2."Num",'000')), T2."Amount",T2."ComponentType",trim(to_char(T2."Num",'000')) AS num FROM "OrderComponents" AS T2 INNER JOIN Tmp ON (Tmp."ComponentID"= T2."ParentID")) SELECT *, (SELECT MAX(LVL) FROM Tmp) AS MaxLvl FROM Tmp ORDER BY SRT; [/sql] Подскажите где грабли, какие настройки крутить.
народ глянул, отписывается если сам запрос выполняется быстро, значит дело не в движке БД и не в запросе. надо замерить время: - подключения к бд - какого-либо простейшего запроса - запроса без обработки результатов - запроса с обработкой результатов так можно будет посмотреть в бутылочное горлышко
Gromo Спасибо, дружище! Я знал что ты глянешь ) В том то и дело, что другие запросы выполняются нормально. Это не первая моя форма. И даже уже не первый проект. И подобный рекурсивный запос у меня отрабатывает нормально в предыдущем проекте. Вобщем мистика какая-то... А не подскажешь, чем можно производить замеры? Может есть системы которые оценивают загрузку. Сэмплинг там какой-нибудь, профилирование. Ну и всякое такое. На крйняк я конечно на линуксе буду microtime-ом пользоваться, но может есть что-нибудь специальное? P.S. комп у меня дохлый пень4 1,4ггц, 512 мозгов
тем же microtime. просто нужно каждый замер производить по отдельности. в данном случае разница не будет большой. просто обновляй страницу несколько раз и бери результат последнего замера. это конечно всё неточно, но по крайней мере поможет указать более точно место торможения
Разобрался. Дело было не в бобине. Тормозит-глючит эксплорер. Конкретно в данном случае следующее: [js] Orders.Components.startWait = function() { if (!Orders.Components.waitBox) { var pos = getElementPosition(Orders.Components.Container); Orders.Components.waitBox = document.createElement("DIV"); Orders.Components.waitBox.style.zIndex = getMaxZIndex(); Orders.Components.waitBox.className = "light-overlay"; Orders.Components.waitBox.style.width = pos.width + "px"; Orders.Components.waitBox.style.height = pos.height + "px"; Orders.Components.waitBox.style.left = (pos.left+2) + "px"; Orders.Components.waitBox.style.top = (pos.top+2) + "px"; Orders.Components.waitBox.innerHTML="<img src='img/activityanimation.gif'>"; document.body.appendChild(Orders.Components.waitBox); } } [/js] а точнее сказать вот это: Orders.Components.waitBox.innerHTML="<img src='img/activityanimation.gif'>";