Показать сообщение отдельно
Старый 15.12.2011, 15:01   #1  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
Чистка черновиков или тормоза на форме "Проекты" AX2009 RU5
У нас есть тестовая база со стандартной логикой. Залили туда некоторые данные из рабочей. Открыл форму "Проекты". И вспомнил как мы столкнулись с жуткими тормозами на этой форме при переходе на АХ2009. При открытии формы "Проекты" на тестовой базе тормоза наблюдаются, но не такие заметные, так как данных мы залили не много. А на рабочей с реальными данными просто жуть.
А все потому, что в табличке ProjTable есть метод:
X++:
public boolean trxExists()
{
    ProjId                  projId = this.ProjId;
    boolean                 ret = true;

    ProjJournalTrans        projJournalTrans;
    LedgerJournalTrans      ledgerJournalTrans;
    InventJournalTrans      inventJournalTrans;
    ProjTransPosting        projTransPosting;
    SalesLine               salesLine;
    PurchLine               purchLine;
    SMAAgreementTable       smaAgreementTable;
    SMASubscriptionTable    smaSubscriptionTable;
    ProjRevenueTrans        projRevenueTrans;
    ProjOnAccTrans          projOnAccTrans;
    SMAServiceOrderLine     smaServiceOrderLine;
    PurchReqTable           purchReqTable;
    PurchRFQCaseTable       purchRFQCaseTable;
    ;

    if (this.Header == NoYes::No)
    {
        if(((select firstonly projJournalTrans      where projJournalTrans.ProjId        == projId).RecId == 0) &&
           ((select firstonly ledgerJournalTrans    where ledgerJournalTrans.AccountNum  == projId &&
                                                          ledgerJournalTrans.AccountType == LedgerJournalACType::Project).RecId == 0) &&
           ((select firstonly inventJournalTrans    where inventJournalTrans.ProjId      == projId).RecId == 0) &&
           ((select firstonly projTransPosting      where projTransPosting.ProjId        == projId).RecId == 0) &&
           ((select firstonly salesLine             where salesLine.ProjId               == projId).RecId == 0) &&
           ((select firstonly purchLine             where purchLine.ProjId               == projId).RecId == 0) &&
           ((select firstonly smaAgreementTable     where smaAgreementTable.ProjId       == projId).RecId == 0) &&
           ((select firstonly smaSubscriptionTable  where smaSubscriptionTable.ProjId    == projId).RecId == 0) &&
           ((select firstonly projRevenueTrans      where projRevenueTrans.ProjId        == projId).RecId == 0) &&
           ((select firstonly projOnAccTrans        where projOnAccTrans.ProjID          == projId).RecId == 0) &&
           ((select firstonly smaServiceOrderLine   where smaServiceOrderLine.ProjId     == projId).RecId == 0) &&
           ((select firstonly purchReqTable         where purchReqTable.ProjId           == projId).RecId == 0) &&
           ((select firstonly purchRFQCaseTable     where purchRFQCaseTable.ProjId       == projId).RecId == 0) &&
           (!this.AssetId))
        {
            ret = false;
        }
    }
    else
    {
        ret = false;
    }

    return ret;
}
он дергается из метода на форме setFieldAccess(), а этот, в свою очередь, стоит в методе active() у главного датасоурса: ProjTable.
Сразу скажу, что мы приняли решение во все таблицы добавить индех по полю ProjId, а в таблицу LedgerJournalTrans по AccountNum,AccountType.Скорректировали запросы в этом методе на IndexHint и все зашуршало.
В основном тормоза были на таблицах projJournalTrans,LedgerJournalTrans,inventJournalTrans,SalesLine,PurchLine. Эти таблицы, можно сказать являются справочниками-черновиками. Вся главная информация лежит в проводках. И у меня возникает вопрос: разработчики не обратили на скорость внимание рассчитывая на то, что черновики периодически должны чиститься или просто не подумали? Но главный вопрос вообще о целесообразности чистки черновиков. Кто-нибудь чистит эти таблицы? У нас эти таблицы не чистятся. Записей очень много.
PS: Тему может быть неудачно назвал. Но ведь можно было назвать и так "Чистка черновиков и Экономия место БД" или как-то еще. Решил так как есть, так как задумался об этом на форме.
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.
За это сообщение автора поблагодарили: lev (5).