添加外部联接数据源时的表单性能



我有一个具有以下数据源设置的自定义表单;

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

。它没有任何性能问题。

当我添加以下内容时;

InventHazardousGroup (InventTable - Outer Join)

。我认为在我们的开发环境中没有性能问题,但是在生产环境中,查询非常慢,这意味着表单需要很长时间才能加载。

SQL 语句跟踪日志在两种环境中生成以下输出;

(我已经用 etc 结束了字段列表,因为它很长);

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 个月前。我在生产环境中,在不同的公司中遇到相同的性能问题。

我以前遇到过这个问题,我认为它与外部连接没有任何关系。这很可能是因为表单在生产与开发中生成的查询数。SQL在使用查询时尝试缓存查询,AX喜欢将对象作为变量传递到SQL中。最有可能的是,您在生产环境中有一个错误的缓存计划,然后被所有用户使用。我建议使用原力文字。我在几个地方很少使用它,它对性能产生了重大影响。

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

检查查询的执行计划。

最简单的方法是记录到信息日志(在用户设置的 SQL 选项卡上设置长查询),然后双击有问题的查询。

否则,请尝试重新生成表的索引并create statistics表。

您在开发中运行的 SQL Server 版本以及生产中的版本。执行DBCC TRACESTATUS(-1);以确定开发与生产中的标志。确保它们没有差异。我见过这样的问题,当他们这样做时,性能问题会出现在一个,而不是另一个。

查询在生产中总是运行缓慢,还是只是有时运行缓慢?

最新更新