Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Большое значение physical read total bytes при работе через ODAC 5.1  [new]
Бульбаш
Member

Откуда:
Сообщений: 31
Софт написанный на Delphi/odac начал прилично тормозить на выборках. При запуске запроса в toad-e выборка происходит за миллисекунды. Время той же выборки в программе исчисляется десятками минут. Пробовал odac запускать через ораклового клиента - тоже самое. Выполнил
SELECT NAME, VALUE FROM v$mystat ms, v$statname sn WHERE ms.statistic# = sn.statistic# до и после выполнения запроса. В результате насторожило значение physical read total bytes 0 до и 468312064 после выборки. Пока это единственная зацепка. Подскажите плиз где искать первоисточник проблемы.
4 апр 11, 14:52    [10467928]     Ответить | Цитировать Сообщить модератору
 Re: Большое значение physical read total bytes при работе через ODAC 5.1  [new]
OracleX
Member

Откуда:
Сообщений: 1998
Установите, как в TOAD, свойства:
FetchRows
FetchAll
4 апр 11, 16:09    [10468561]     Ответить | Цитировать Сообщить модератору
 Re: Большое значение physical read total bytes при работе через ODAC 5.1  [new]
Бульбаш
Member

Откуда:
Сообщений: 31
выборка небольшая - 25 записей
4 апр 11, 16:29    [10468759]     Ответить | Цитировать Сообщить модератору
 Re: Большое значение physical read total bytes при работе через ODAC 5.1  [new]
OracleX
Member

Откуда:
Сообщений: 1998
Ну так сделайте для не очень широкой таблицы
FetchRows=1000

а в TOAD попробуйте загрузить все записи.
4 апр 11, 16:34    [10468809]     Ответить | Цитировать Сообщить модератору
 Re: Большое значение physical read total bytes при работе через ODAC 5.1  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54376
Бульбаш,

запрос покажи
какой в жабе
и какой в одаке

и параметры
4 апр 11, 16:41    [10468876]     Ответить | Цитировать Сообщить модератору
 Re: Большое значение physical read total bytes при работе через ODAC 5.1  [new]
Бульбаш
Member

Откуда:
Сообщений: 31
Запросы абсолютно одинаковые, передаются три параметра integer.
4 апр 11, 17:40    [10469277]     Ответить | Цитировать Сообщить модератору
 Re: Большое значение physical read total bytes при работе через ODAC 5.1  [new]
OracleX
Member

Откуда:
Сообщений: 1998
andreymx попросил не зря
4 апр 11, 18:05    [10469476]     Ответить | Цитировать Сообщить модератору
 Re: Большое значение physical read total bytes при работе через ODAC 5.1  [new]
Бульбаш
Member

Откуда:
Сообщений: 31
select a.id,a.id_lic,a.d_vip,decode(c.d_vip,null,add_months(a.d_vip,d.srsl+nvl(f.srpr,0)),c.d_vip) d_ps,a.id_mat,a.qokp,a.name n_mat,
a.kolvo,a.tsen,e.si,e.mi,d.srsl,f.srpr,round(e.mi*100/d.srsl,0) pri,100-round(a.MES_IZ/a.SRSL*100,0) pr1,a.sum,a.sum-e.si oss,c.d_vip d_spis,
c.kolvo kols,c.osum,decode(c.d_vip,null,'ýêñï','ñïèñ') vid,decode(c.d_vip,null,to_number(null),100-round(e.mi*100/d.srsl,0)) pr2,
(select sum_iz from move where qvop=10 and id_lic=:p0 and to_number(to_char(d_vip,'MM'))=:p1 and to_number(to_char(d_vip,'YYYY'))=:p2 and id_mat=a.id_mat) izn_mes
from move a, mts.s_okp b,
(select id_mat,d_vip,kolvo,decode(qvop,4,to_number(null),sum-sum_iz) osum from move where pri=2
and id_lic=:p0 and d_vip<add_months(to_date('01.'||to_char(:p1)||'.'||to_char(:p2),'DD.MM.YYYY'),1)) c,srok d,
(select id_mat,sum(sum_iz) si,sum(mes_iz) mi from move where qvop in(3,10,11,12) and pri in(1,4) and id_lic=:p0
and d_vip<add_months(to_date('01.'||to_char(:p1)||'.'||to_char(:p2),'DD.MM.YYYY'),1) group by id_mat) e,
(select id,sum(srpr) srpr from psrok group by id) f
where a.qokp=b.QOKP and a.pri=1 and a.id_mat=c.id_mat(+) and a.id_mat=d.id_mat(+) and a.id_mat=e.id_mat(+) and a.id=f.id(+)
and a.id_lic=:p0 and a.d_vip<add_months(to_date('01.'||to_char(:p1)||'.'||to_char(:p2),'DD.MM.YYYY'),1)
order by vid desc,a.name
5 апр 11, 09:45    [10471484]     Ответить | Цитировать Сообщить модератору
 Re: Большое значение physical read total bytes при работе через ODAC 5.1  [new]
AlexFF__|
Member

Откуда:
Сообщений: 2852
Бульбаш,

Меняйте дельфи.
5 апр 11, 10:40    [10471817]     Ответить | Цитировать Сообщить модератору
 Re: Большое значение physical read total bytes при работе через ODAC 5.1  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54376
Бульбаш,

почему не форматируешь?
SELECT A.ID,A.id_lic,A.d_vip,DECODE(c.d_vip,NULL,ADD_MONTHS(A.d_vip,d.srsl+NVL(f.srpr,0)),c.d_vip) d_ps,A.id_mat,A.qokp,A.NAME n_mat,
       A.kolvo,A.tsen,E.si,E.mi,d.srsl,f.srpr,
       ROUND(E.mi*100/d.srsl,0) pri,
       100-ROUND(A.MES_IZ/A.SRSL*100,0) pr1,
       A.SUM,
       A.SUM-E.si oss,c.d_vip d_spis,
       c.kolvo kols,c.osum,
       DECODE(c.d_vip,NULL,'yeni','nien') vid,
       DECODE(c.d_vip,NULL,TO_NUMBER(NULL),100-ROUND(E.mi*100/d.srsl,0)) pr2,
       (SELECT sum_iz
         FROM MOVE
        WHERE qvop=10 AND id_lic=:p0
          AND TO_NUMBER(TO_CHAR(d_vip,'MM'))=:p1 AND TO_NUMBER(TO_CHAR(d_vip,'YYYY'))=:p2 AND id_mat=A.id_mat
       ) izn_mes
  FROM MOVE A,
       mts.s_okp b,
      (SELECT id_mat,d_vip,kolvo,
              DECODE(qvop,4,TO_NUMBER(NULL),SUM-sum_iz) osum
         FROM MOVE
         WHERE pri=2
          AND id_lic=:p0 AND d_vip<ADD_MONTHS(TO_DATE('01.'||TO_CHAR(:p1)||'.'||TO_CHAR(:p2),'DD.MM.YYYY'),1)
      ) c,
      srok d,
     (SELECT id_mat,SUM(sum_iz) si,SUM(mes_iz) mi
        FROM MOVE
       WHERE qvop IN(3,10,11,12) AND pri IN(1,4) AND id_lic=:p0
        AND d_vip<ADD_MONTHS(TO_DATE('01.'||TO_CHAR(:p1)||'.'||TO_CHAR(:p2),'DD.MM.YYYY'),1)
      GROUP BY id_mat
     ) E,
     (SELECT ID,SUM(srpr) srpr FROM psrok GROUP BY ID) f
 WHERE A.qokp=b.QOKP
   AND A.pri=1
   AND A.id_mat=c.id_mat(+)
   AND A.id_mat=d.id_mat(+)
   AND A.id_mat=E.id_mat(+)
   AND A.ID=f.ID(+)
   AND A.id_lic=:p0
   AND A.d_vip<ADD_MONTHS(TO_DATE('01.'||TO_CHAR(:p1)||'.'||TO_CHAR(:p2),'DD.MM.YYYY'),1)
 ORDER BY vid desc,A.NAME 

зачем всегда все даты старше выбранной?
AND A.d_vip<ADD_MONTHS(TO_DATE('01.'||TO_CHAR(:p1)||'.'||TO_CHAR(:p2),'DD.MM.YYYY'),1)


выбиваешься из индекса по d_vip
AND TO_NUMBER(TO_CHAR(d_vip,'MM'))=:p1 AND TO_NUMBER(TO_CHAR(d_vip,'YYYY'))=:p2 AND id_mat=A.id_mat


ЗЫ: сорри, но за алиасы вида a b c d повбывав бы
5 апр 11, 11:15    [10472068]     Ответить | Цитировать Сообщить модератору
 Re: Большое значение physical read total bytes при работе через ODAC 5.1  [new]
OracleX
Member

Откуда:
Сообщений: 1998
Типы параметров в TOAD и в ODAC, может быть, разные
5 апр 11, 11:47    [10472393]     Ответить | Цитировать Сообщить модератору
 Re: Большое значение physical read total bytes при работе через ODAC 5.1  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54376
OracleX
Типы параметров в TOAD и в ODAC, может быть, разные
там TO_DATE, не должно вроде влиять
5 апр 11, 12:06    [10472575]     Ответить | Цитировать Сообщить модератору
 Re: Большое значение physical read total bytes при работе через ODAC 5.1  [new]
OracleX
Member

Откуда:
Сообщений: 1998
Например, здесь:
id_lic=:p0
5 апр 11, 13:03    [10473066]     Ответить | Цитировать Сообщить модератору
 Re: Большое значение physical read total bytes при работе через ODAC 5.1  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54376
OracleX
Например, здесь:
id_lic=:p0
+1

хотя ТС вроде писал "передаются три параметра integer"
5 апр 11, 13:26    [10473314]     Ответить | Цитировать Сообщить модератору
 Re: Большое значение physical read total bytes при работе через ODAC 5.1  [new]
Бульбаш
Member

Откуда:
Сообщений: 31
Параметры и там и там integer. Поскольку запрос в тоде выполняется без проблем, предполагаю что дело не в нем. Все приложение работает через одну сессию. Сейчас попробовал повесить вторую сессию, подключил датасет через нее - работает отлично. Как то все еще больше запуталось...
5 апр 11, 14:16    [10473764]     Ответить | Цитировать Сообщить модератору
 Re: Большое значение physical read total bytes при работе через ODAC 5.1  [new]
SQLap
Member [заблокирован]

Откуда:
Сообщений: 34063
Бульбаш,

значит, надо найти различия в опциях двух сессий
5 апр 11, 14:18    [10473778]     Ответить | Цитировать Сообщить модератору
 Re: Большое значение physical read total bytes при работе через ODAC 5.1  [new]
Бульбаш
Member

Откуда:
Сообщений: 31
Вторую сессию просто скопировал из первой, все опции одинаковые...
5 апр 11, 14:49    [10474048]     Ответить | Цитировать Сообщить модератору
 Re: Большое значение physical read total bytes при работе через ODAC 5.1  [new]
kinky cat
Member

Откуда: с дивана23
Сообщений: 1238
OracleX
Установите, как в TOAD, свойства:
FetchRows
FetchAll

это + сделайте трассировку левел12
и сравните
может и сюда их выложить
5 апр 11, 17:13    [10475346]     Ответить | Цитировать Сообщить модератору
 Re: Большое значение physical read total bytes при работе через ODAC 5.1  [new]
Бульбаш
Member

Откуда:
Сообщений: 31
у меня запрет, завтра с админом попробую...
5 апр 11, 17:35    [10475496]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить