20.09.2007, 12:48 | #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. |
|
20.09.2007, 12:52 | #2 |
Участник
|
Может это просто пользователи смотрят форму строк накладных клиента?
Включите сохранение запросов в таблицу. Он при этом сохраняет и стек, а соответственно, можно будет посмотреть, откуда ноги растут. Профайлер можно настроить в настройках пользователя на закладке SQL |
|
20.09.2007, 13:50 | #3 |
Участник
|
|
|
20.09.2007, 13:52 | #4 |
Участник
|
В настройках АОСа можно такуюже трассировку поставить и определить Query Time Limit
|
|
20.09.2007, 14:18 | #5 |
Участник
|
|
|
20.09.2007, 14:21 | #6 |
Участник
|
Может Reports\CustInvoice
|
|
20.09.2007, 14:27 | #7 |
Участник
|
|
|
20.09.2007, 14:31 | #8 |
Участник
|
Там в fetch есть
X++: tradeLoopTransQuery = custInvoiceJour.queryCustInvoiceTrans(); tradeLoopTransQuery.recordLevelSecurity(false); // must always print all lines. tradeLoopTrans = new QueryRun(tradeLoopTransQuery); |
|
20.09.2007, 14:40 | #9 |
Участник
|
А оно коллстек в разве не вываливает? Когда пользователь откроет эту форму - вы получите коллстек.
|
|
20.09.2007, 14:51 | #10 |
Участник
|
Цитата:
Там в fetch есть...может оно?
Цитата:
А оно коллстек в разве не вываливает? Когда пользователь откроет эту форму - вы получите коллстек.
|
|
20.09.2007, 16:10 | #11 |
Участник
|
я имел ввиду параметры АОСа
|
|
24.09.2007, 07:37 | #12 |
Участник
|
Такой еще вопрос - SQL-код, который можно посмотреть в таблице SysTraceTableSQL - это конечный код, который передается Ораклу, и который никогда уже им не изменится? Это я к тому, что похожих запросов очень много. В основном, не совпадают поля сортировки - сортировки вообще нет, а на Оракле сортируется по полям одного из индексов.
|
|
24.09.2007, 09:55 | #13 |
Участник
|
А это у вас не форма обработки счетов-фактур?
FactureEditLines_RU
__________________
Axapta v.3.0 sp5 kr2 |
|
24.09.2007, 13:32 | #14 |
Участник
|
Я не вполне уверен, что это не она ).
Дело в следующем - сортировка в запросе на этой форме идет по полям другого индекса. Причем сортировкой рулит Аксапта, явных указаний на использование индекса или выражений order by не присутствует. |
|
24.09.2007, 13:56 | #15 |
Участник
|
Вы ошибаетесь.
В настройках датасорса CustInvoiceTrans явно указано - для сортировки использовать индекс ItemIdIdx
__________________
Axapta v.3.0 sp5 kr2 |
|
25.09.2007, 05:45 | #16 |
Участник
|
Не ошибаюсь. Возможно эта форма изменялась в прошлом, но сейчас явной сортировки не указано. Интересует следующий вопрос - если не указать Oracle index-hint, применит он сортировку или нет? А если да - то чем определяется выбор индекса? Есть подозрение, что все происходит все же на FactureEditLines_RU, но никак не могу разобраться, откуда берется сортировка по индексу ItemIdIdx, причем без index hint.
|
|
25.09.2007, 08:32 | #17 |
Участник
|
Цитата:
Посмотрите по слоям, есть ли изменения выше dis. Посмотрите дату изменения и кто изменял. Возможно, изменили уже после того, как вы начали разбираться с запросом. И при чем здесь index hint? Это подсказка серверу, какой индекс использовать в плане запроса. Для указания явной сортировки по индексу используется конструкция index ItemIdIdx. Или в датасорсе в свойстве Index указывается нужный индекс
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: eLLoco (1). |
25.09.2007, 08:49 | #18 |
Участник
|
AndyD, действительно, дело было в свойстве Index на datasource этой формы. И действительно, была путаница с изменениями. Благодарю за сэкономленное время .
Последний раз редактировалось eLLoco; 25.09.2007 в 08:51. Причина: c bb-кодами косяк |
|
|
Похожие темы | ||||
Тема | Ответов | |||
Экспорт результатов SQL запроса в CSV | 14 | |||
Управление опциями SQL запроса | 9 | |||
Вставка значения container в план запроса SQL | 4 | |||
Формирование sql запроса по Ctrl + F | 2 |
|