AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.09.2007, 12:48   #1  
eLLoco is offline
eLLoco
Участник
 
10 / 10 (1) +
Регистрация: 28.08.2007
Поиск места вызова 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
Как видите, выбираются все поля таблицы CustInvoiceTrans с хинтом firstonly (или firstfast). Потратил уже три дня на поиск кода, откуда вызывается этот запрос. Что предпринимал: искал по AOT всевозможные комбинации "select [firstonly] [firstfast] custinvoicetrans", также проверял, не используются ли классы Query/QueryRun/... поиском "addRange(fieldNum(custInvoiceTrans", смотрел Query's, которые располагаются в AOT. Результаты получились следующие - есть запросы почти идентичные этому, но ни один из них не содержат выражения ORDER BY (или не вызывают метод addSortField()). Пробовал смотреть их SQL-код - ORDER BY там не появлялся.
Отчаявшись, сижу и перебираю результаты поиска по всему AOT строки "CustInvoiceTrans". 1702 результата и успехом пока не пахнет.
Может быть, я упустил какую-то возможность или не учел какой-то случай? Буду рад любой помощи.

Последний раз редактировалось eLLoco; 24.09.2007 в 12:49.
Старый 20.09.2007, 12:52   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Может это просто пользователи смотрят форму строк накладных клиента?

Включите сохранение запросов в таблицу. Он при этом сохраняет и стек, а соответственно, можно будет посмотреть, откуда ноги растут.
Профайлер можно настроить в настройках пользователя на закладке SQL
Старый 20.09.2007, 13:50   #3  
eLLoco is offline
eLLoco
Участник
 
10 / 10 (1) +
Регистрация: 28.08.2007
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Может это просто пользователи смотрят форму строк накладных клиента?
пробовал. в форме "расчеты с клиентами/запросы/журналы/накладная" идет выборка с двух таблиц, а в "расчеты с клиентами/накладная на услуги" используется CustInvoiceLine.
Старый 20.09.2007, 13:52   #4  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
В настройках АОСа можно такуюже трассировку поставить и определить Query Time Limit
Старый 20.09.2007, 14:18   #5  
eLLoco is offline
eLLoco
Участник
 
10 / 10 (1) +
Регистрация: 28.08.2007
Цитата:
Сообщение от belugin Посмотреть сообщение
В настройках АОСа можно такуюже трассировку поставить и определить Query Time Limit
трассировал уже. открывать-закрывать-нажимать_кнопки по всем формам не имеет смысла, а других форм, использующих CustInvoiceTrans, кроме указанных в предыдущем посте, я не знаю.
Старый 20.09.2007, 14:21   #6  
kokorins is offline
kokorins
Участник
 
2 / 10 (1) +
Регистрация: 04.07.2007
Может Reports\CustInvoice
Старый 20.09.2007, 14:27   #7  
eLLoco is offline
eLLoco
Участник
 
10 / 10 (1) +
Регистрация: 28.08.2007
Цитата:
Сообщение от kokorins Посмотреть сообщение
Может Reports\CustInvoice
Во всех отчетах CustInvoice* в качестве DataSource указана таблица журнала накладных CustInvoiceJour.
Старый 20.09.2007, 14:31   #8  
kokorins is offline
kokorins
Участник
 
2 / 10 (1) +
Регистрация: 04.07.2007
Post
Там в fetch есть
X++:
tradeLoopTransQuery = custInvoiceJour.queryCustInvoiceTrans();
            tradeLoopTransQuery.recordLevelSecurity(false); // must always print all lines.
            tradeLoopTrans = new QueryRun(tradeLoopTransQuery);
может оно?
Старый 20.09.2007, 14:40   #9  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от eLLoco Посмотреть сообщение
трассировал уже. открывать-закрывать-нажимать_кнопки по всем формам не имеет смысла, а других форм, использующих CustInvoiceTrans, кроме указанных в предыдущем посте, я не знаю.
А оно коллстек в разве не вываливает? Когда пользователь откроет эту форму - вы получите коллстек.
Старый 20.09.2007, 14:51   #10  
eLLoco is offline
eLLoco
Участник
 
10 / 10 (1) +
Регистрация: 28.08.2007
Цитата:
Там в fetch есть...может оно?
нет, это не оно. если пойти внутрь методов, это видно.
Цитата:
А оно коллстек в разве не вываливает? Когда пользователь откроет эту форму - вы получите коллстек.
прошу прощения, не совсем понял. трассировал установкой галки "Трассировка SQL" в параметрах пользователя. попробовал открывать (ставить-снимать фильтры, etc) эти формы - нужного запроса не было. оригинальный текст запроса получен с Оракла, у него callstack'а нет.
Старый 20.09.2007, 16:10   #11  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
я имел ввиду параметры АОСа
Старый 24.09.2007, 07:37   #12  
eLLoco is offline
eLLoco
Участник
 
10 / 10 (1) +
Регистрация: 28.08.2007
Такой еще вопрос - SQL-код, который можно посмотреть в таблице SysTraceTableSQL - это конечный код, который передается Ораклу, и который никогда уже им не изменится? Это я к тому, что похожих запросов очень много. В основном, не совпадают поля сортировки - сортировки вообще нет, а на Оракле сортируется по полям одного из индексов.
Старый 24.09.2007, 09:55   #13  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
А это у вас не форма обработки счетов-фактур?
FactureEditLines_RU
__________________
Axapta v.3.0 sp5 kr2
Старый 24.09.2007, 13:32   #14  
eLLoco is offline
eLLoco
Участник
 
10 / 10 (1) +
Регистрация: 28.08.2007
Цитата:
Сообщение от AndyD Посмотреть сообщение
А это у вас не форма обработки счетов-фактур?
FactureEditLines_RU
Я не вполне уверен, что это не она ).
Дело в следующем - сортировка в запросе на этой форме идет по полям другого индекса. Причем сортировкой рулит Аксапта, явных указаний на использование индекса или выражений order by не присутствует.
Старый 24.09.2007, 13:56   #15  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Вы ошибаетесь.
В настройках датасорса CustInvoiceTrans явно указано - для сортировки использовать индекс ItemIdIdx
__________________
Axapta v.3.0 sp5 kr2
Старый 25.09.2007, 05:45   #16  
eLLoco is offline
eLLoco
Участник
 
10 / 10 (1) +
Регистрация: 28.08.2007
Цитата:
Сообщение от AndyD Посмотреть сообщение
Вы ошибаетесь.
В настройках датасорса CustInvoiceTrans явно указано - для сортировки использовать индекс ItemIdIdx
Не ошибаюсь. Возможно эта форма изменялась в прошлом, но сейчас явной сортировки не указано. Интересует следующий вопрос - если не указать Oracle index-hint, применит он сортировку или нет? А если да - то чем определяется выбор индекса? Есть подозрение, что все происходит все же на FactureEditLines_RU, но никак не могу разобраться, откуда берется сортировка по индексу ItemIdIdx, причем без index hint.
Старый 25.09.2007, 08:32   #17  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от eLLoco Посмотреть сообщение
Возможно эта форма изменялась в прошлом, но сейчас явной сортировки не указано.
?
Посмотрите по слоям, есть ли изменения выше dis. Посмотрите дату изменения и кто изменял. Возможно, изменили уже после того, как вы начали разбираться с запросом.

И при чем здесь index hint? Это подсказка серверу, какой индекс использовать в плане запроса.
Для указания явной сортировки по индексу используется конструкция index ItemIdIdx. Или в датасорсе в свойстве Index указывается нужный индекс
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: eLLoco (1).
Старый 25.09.2007, 08:49   #18  
eLLoco is offline
eLLoco
Участник
 
10 / 10 (1) +
Регистрация: 28.08.2007
AndyD, действительно, дело было в свойстве Index на datasource этой формы. И действительно, была путаница с изменениями. Благодарю за сэкономленное время .

Последний раз редактировалось eLLoco; 25.09.2007 в 08:51. Причина: c bb-кодами косяк
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Экспорт результатов SQL запроса в CSV adandreev DAX: Программирование 14 13.07.2007 11:59
Управление опциями SQL запроса Ю-ю DAX: База знаний и проекты 9 20.02.2007 19:52
Вставка значения container в план запроса SQL mit DAX: Программирование 4 24.11.2005 18:42
Формирование sql запроса по Ctrl + F if_maks DAX: Программирование 2 08.10.2003 20:04

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 01:38.