|  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 | |||
| 
 |