[英]Procedure performance. SQL Server, Dynamics AX 2012 R3 CU10
我們從ERP應用程序Dynamics AX 2012 R3 CU10運行此代碼,這是從AX 4升級過程的一部分。
ttsbegin;
while select forupdate salesLine
where salesLine.RemainSalesFinancial != 0
&& salesLine.RemainInventFinancial == 0
{
salesLine.RemainInventFinancial = 0;
select sum(Qty) from inventTrans
where inventTrans.del_InventTransId == salesLine.InventTransId
&&(inventTrans.StatusIssue == StatusIssue::Deducted
|| inventTrans.StatusReceipt == StatusReceipt::Received);
salesLine.RemainInventFinancial = -inventTrans.Qty;
salesLine.doUpdate();
}
ttscommit;
問題是我們為2個安裝運行了此過程。 在第一個安裝中,整個過程需要45分鍾才能執行,但是在第二個安裝中,則需要24小時。
我試圖找出性能問題在哪里。 這是我的觀察:
我不確定OS o SQL Server版本是否會對執行時間產生如此影響。 在訂購軟件或操作系統更改之前,我需要確保這是問題所在。
我不知道還要檢查什么。 有任何想法嗎?
如果有人想看看,代碼在class.method中: ReleaseUpdateDB401_Cust.updateSalesLineRemainInventFinancial
正如問題注釋所顯示的,可以通過有關其余字段的數據差異來解釋時間差異。
為了加快處理速度,僅需使用往返數據庫的一次往返:
salesLine.skipDataMethods(true);
update_recordset salesLine
setting RemainInventFinancial = -inventTrans.Qty
where salesLine.RemainSalesFinancial != 0
&& salesLine.RemainInventFinancial == 0
join sum(Qty) from inventTrans
where inventTrans.del_InventTransId == salesLine.InventTransId
&&(inventTrans.StatusIssue == StatusIssue::Deducted
|| inventTrans.StatusReceipt == StatusReceipt::Received);
info(int642str(salesLine.rowCount()); // Number of records updated
速度將提高兩個數量級(10-100倍)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.