|
|
#1 |
|
Участник
|
Поиск места вызова SQL запроса
Здравствуйте.
Возникла задача оптимизации запроса из TOP30 по статистике Oracle. Вот он: Код: SELECT /*+ FIRST_ROWS */
a.invoiceid, a.invoicedate, a.linenum, a.inventtransid, a.
itemid, a.externalitemid, a."NAME", a.taxgroup, a.currencycode,
a.priceunit, a.qty, a.del_costvalue, a.salesprice, a.
discpercent, a.discamount, a.lineamount, a.ledgeraccount, a.
dimension, a.dimension2_, a.dimension3_, a.dimension4_, a.
dimension5_, a.qtyphysical, a.partdelivery, a.remain, a.
salesid, a.salesunit, a.salesmarkup, a.transactioncode, a.
del_configid, a.taxautogenerated, a.taxitemgroup, a.taxamount,
a.taxwritecode, a.multilndisc, a.multilnpercent, a.linedisc,
a.linepercent, a.origsalesid, a.lineheader, a.transport, a.
inventdimid, a.numbersequencegroup, a.statprocid, a.dlvdate,
a.lineamounttax, a.port, a.customerlinenum, a.lineamountmst,
a.taxamountmst, a.lineamounttaxmst, a.sumlinedisc, a.
sumlinediscmst, a.intercompanyinventtransid, a.excisevalue_ru,
a.vatvalue_ru, a.exciseamount_ru, a.vatamount_ru, a.
facturedqty_ru, a.facturedfully_ru, a.inventshiftjournalid,
a.returnactionid, a.createdby, a.recid
FROM custinvoicetrans a
WHERE SUBSTR(NLS_LOWER(salesid), 1, 20) = NLS_LOWER(:in1)
AND SUBSTR(NLS_LOWER(invoiceid), 1, 20) = NLS_LOWER(:in2)
AND invoicedate = :in3
AND SUBSTR(NLS_LOWER(numbersequencegroup), 1, 10) =
NLS_LOWER(:in4)
ORDER BY SUBSTR(NLS_LOWER(a.itemid), 1, 25), a.invoicedateОтчаявшись, сижу и перебираю результаты поиска по всему AOT строки "CustInvoiceTrans". 1702 результата и успехом пока не пахнет. Может быть, я упустил какую-то возможность или не учел какой-то случай? Буду рад любой помощи. Последний раз редактировалось eLLoco; 24.09.2007 в 12:49. |
|
|
|
|
#2 |
|
Участник
|
Может это просто пользователи смотрят форму строк накладных клиента?
Включите сохранение запросов в таблицу. Он при этом сохраняет и стек, а соответственно, можно будет посмотреть, откуда ноги растут. Профайлер можно настроить в настройках пользователя на закладке SQL |
|
|
|
|
#3 |
|
Участник
|
|
|
|
|
|
#4 |
|
Участник
|
В настройках АОСа можно такуюже трассировку поставить и определить Query Time Limit
|
|
|
|
|
#5 |
|
Участник
|
|
|
|
|
|
#6 |
|
Участник
|
Может Reports\CustInvoice
|
|
|
|
|
#7 |
|
Участник
|
|
|
|
|
|
#8 |
|
Участник
|
Там в fetch есть
X++: tradeLoopTransQuery = custInvoiceJour.queryCustInvoiceTrans();
tradeLoopTransQuery.recordLevelSecurity(false); // must always print all lines.
tradeLoopTrans = new QueryRun(tradeLoopTransQuery); |
|
|
|
|
#9 |
|
Участник
|
А оно коллстек в разве не вываливает? Когда пользователь откроет эту форму - вы получите коллстек.
|
|
|
|
|
#10 |
|
Участник
|
Цитата:
Там в fetch есть...может оно?
Цитата:
А оно коллстек в разве не вываливает? Когда пользователь откроет эту форму - вы получите коллстек.
|
|
|
|
|
#11 |
|
Участник
|
я имел ввиду параметры АОСа
|
|
|
|
|
#12 |
|
Участник
|
Такой еще вопрос - SQL-код, который можно посмотреть в таблице SysTraceTableSQL - это конечный код, который передается Ораклу, и который никогда уже им не изменится? Это я к тому, что похожих запросов очень много. В основном, не совпадают поля сортировки - сортировки вообще нет, а на Оракле сортируется по полям одного из индексов.
|
|
|
|
|
#13 |
|
Участник
|
А это у вас не форма обработки счетов-фактур?
FactureEditLines_RU
__________________
Axapta v.3.0 sp5 kr2 |
|
|
|
|
#14 |
|
Участник
|
Я не вполне уверен, что это не она ).
Дело в следующем - сортировка в запросе на этой форме идет по полям другого индекса. Причем сортировкой рулит Аксапта, явных указаний на использование индекса или выражений order by не присутствует. |
|
|
|
|
#15 |
|
Участник
|
Вы ошибаетесь.
В настройках датасорса CustInvoiceTrans явно указано - для сортировки использовать индекс ItemIdIdx
__________________
Axapta v.3.0 sp5 kr2 |
|
|
|
|
#16 |
|
Участник
|
Не ошибаюсь. Возможно эта форма изменялась в прошлом, но сейчас явной сортировки не указано. Интересует следующий вопрос - если не указать Oracle index-hint, применит он сортировку или нет? А если да - то чем определяется выбор индекса? Есть подозрение, что все происходит все же на FactureEditLines_RU, но никак не могу разобраться, откуда берется сортировка по индексу ItemIdIdx, причем без index hint.
|
|
|
|
|
#17 |
|
Участник
|
Цитата:
Посмотрите по слоям, есть ли изменения выше dis. Посмотрите дату изменения и кто изменял. Возможно, изменили уже после того, как вы начали разбираться с запросом. И при чем здесь index hint? Это подсказка серверу, какой индекс использовать в плане запроса. Для указания явной сортировки по индексу используется конструкция index ItemIdIdx. Или в датасорсе в свойстве Index указывается нужный индекс
__________________
Axapta v.3.0 sp5 kr2 |
|
|
|
| За это сообщение автора поблагодарили: eLLoco (1). | |
|
|
#18 |
|
Участник
|
AndyD, действительно, дело было в свойстве Index на datasource этой формы. И действительно, была путаница с изменениями. Благодарю за сэкономленное время
.
Последний раз редактировалось eLLoco; 25.09.2007 в 08:51. Причина: c bb-кодами косяк |
|
|
|
|
Похожие темы
|
||||
| Тема | Ответов | |||
| Экспорт результатов SQL запроса в CSV | 14 | |||
| Управление опциями SQL запроса | 9 | |||
| Вставка значения container в план запроса SQL | 4 | |||
| Формирование sql запроса по Ctrl + F | 2 | |||
|