2012-05-16 21 views
3

我有一個自定義表單,其中包含以下數據源設置;添加外部聯接數據源時的表現性能

SalesTable 
SalesLine (SalesTable - Inner Join) 
InventTable (SalesLine - Inner Join) 
InventDim (SalesLine - Inner Join) 

...它工作沒有任何性能問題。

當我添加以下;

InventHazardousGroup (InventTable - Outer Join) 

...我看到在我們的開發環境沒有任何性能問題,但是在生產環境中的查詢是非常緩慢的,這意味着表格需要很長的時間來加載。

SQL語句跟蹤日誌在兩種環境中都生成以下輸出:

(我已經結束了等字段列表,因爲它很長);

SELECT A.SALESID,A.SALESNAME,A.RESERVATION,A.CUSTACCOUNT,A.INVOICEACCOUNT,A.DELIVERYDATE,A.DELIVERYADDRESS,A.URL,A.PURCHORDERFORMNUM,A.SALESTAKER,A.SALESGROUP,A.FREIGHTSLIPTYPE,A.DOCUMENTSTATUS,A.INTERCOMPANYORIGINALSALESID,etc 
FROM {OJ INVENTTABLE C LEFT OUTER JOIN INVENTHAZARDOUSGROUP E ON ((E.DATAAREAID=?) 
AND (C.HAZARDOUSGROUPID=E.HAZARDOUSGROUPID))},SALESTABLE A,SALESLINE B,INVENTDIM D 
WHERE ((A.DATAAREAID=?) 
AND (A.SALESTYPE=?)) 
AND ((B.DATAAREAID=?) 
AND (A.SALESID=B.SALESID)) 
AND ((C.DATAAREAID=?) 
AND (B.ITEMID=C.ITEMID)) 
AND ((D.DATAAREAID=?) 
AND (B.INVENTDIMID=D.INVENTDIMID)) 
ORDER BY A.DATAAREAID,A.SALESID OPTION(FAST 1) 

是否有任何理由在一個環境中應該如此緩慢而在另一個環境中呢?我在開發環境中測試的數據相當新,大約1個月大。在不同的公司中,我在生產環境中具有相同的性能問題。

回答

2

我曾經遇到過這個問題,我不認爲它與外連接有任何關係。這很可能是因爲表單在生產和開發中生成的查詢數量。 SQL試圖在使用時緩存查詢,並且AX喜歡將對象作爲變量傳遞給SQL。最有可能的是,您在Production中有一個錯誤的緩存計劃,然後被所有用戶使用。我建議使用Force Literals。我在一些地方節制地使用了它,並對性能產生了重大影響。

+1

可能值得注意的是,要在表單上完成此操作,可以使用以下語法:'salesTable_ds.query( ).literals(真);' –

0

檢查查詢的執行計劃。

最簡單的方法是登錄到infolog(用戶設置上的SQL選項卡上的長查詢設置),然後雙擊有問題的查詢。

否則,請嘗試表格的索引重建和表格的create statistics

+0

謝謝1月我很想問問DBA這種維護。我知道我可以從AX內重建索引,你知道是否可以在AX內創建統計信息,或者是否是SQL服務器命令? – AnthonyBlake

+0

順便說一句 - 上面的查詢來自切換SQL選項卡上的日誌記錄,它被記錄爲長時間運行的查詢。執行計劃的截圖會有幫助嗎? – AnthonyBlake

+0

是的,如果你擴大執行計劃。如果沒有找到有用的索引,您可能會看到「全表掃描」。 –

1

檢查SQL Server中是否存在AX中的索引。

+0

他們都匹配,但我之前看到過這個問題。同步AOT中的數據字典修復了這一問題。 – AnthonyBlake

0

您的開發中運行的SQL Server版本是什麼,生產版本是什麼版本。通過DBCC TRACESTATUS(-1);來確定dev和prod中的標誌位。確保這些沒有區別。我發現當他們這樣做時,性能問題出現在一個問題上,而不是另一個問題。

查詢總是在生產中運行緩慢,還是隻有有時運行緩慢?

+0

我將向我們的DBA發出電話,謝謝。生產中的表格總是很慢,甚至在營業時間外,以及在任何公司開放。 – AnthonyBlake