Показать сообщение отдельно
Старый 24.11.2015, 17:06   #1  
Morpheus is offline
Morpheus
Участник
Аватар для Morpheus
Соотечественники
 
602 / 167 (7) ++++++
Регистрация: 30.03.2005
Адрес: Київ-København-Düsseldorf
AX 2012 R2 CU7 Исправление медленно закрывающейся формы сопосталений проводок по клиенту/поставщику, открытой из журнала ГК
При помощи Tracing утилиты обнаружил в методе CustVendPaymNote.buildPaymNote() очень медленно выполняющийся запрос:

X++:
while select crossCompany RecId from specTrans
        order by specTrans.RecId
        where specTrans.SpecCompany == _specCompany
           && specTrans.SpecTableId == _specTableId
           && specTrans.SpecRecId   == _specRecId
        join RecId from custVendTransOpen
            where custVendTransOpen.DataAreaId == specTrans.RefCompany
               && custVendTransOpen.TableId == specTrans.RefTableId
               && custVendTransOpen.RecId   == specTrans.RefRecId
        join TransDate, DocumentNum, Invoice, PaymId, Voucher from custVendTrans
            where custVendTrans.RecId == custVendTransOpen.RefRecId

Выполнил его рефакторинг:

X++:
while select crossCompany TransDate, DocumentNum, Invoice, PaymId, Voucher
            from custVendTrans
            join RecId
            from custVendTransOpen
           where custVendTransOpen.RefRecId == custVendTrans.RecId
            join RecId
            from specTrans
           where specTrans.RefCompany       == custVendTransOpen.DataAreaId
              && specTrans.RefTableId       == custVendTransOpen.TableId
              && specTrans.RefRecId         == custVendTransOpen.RecId
              && specTrans.SpecCompany      == _specCompany
              && specTrans.SpecTableId      == _specTableId
              && specTrans.SpecRecId        == _specRecId

И создал на таблице SpecTrans индекс:

X++:
#SpecTransIdx
      PROPERTIES
        Name                #SpecTransIdx
      ENDPROPERTIES
      
      INDEXFIELDS
        #SpecRecId
        #SpecTableId
        #SpecCompany
        #Partition
        #RecId
        #INCLUDEDCOLUMNPRESENT
        #RefRecId
        #INCLUDEDCOLUMNPRESENT
        #RefTableId
        #INCLUDEDCOLUMNPRESENT
        #RefCompany
        #INCLUDEDCOLUMNPRESENT
      ENDINDEXFIELDS

До рефакторинга запрос выполнялся 12 сек, после - меньше 1 сек. Пролем в работе бизнес-логики пока не обнаружил.
За это сообщение автора поблагодарили: Logger (3), plumbum (2).