3

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

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

4

4 回答 4

2

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

于 2012-09-13T18:28:14.683 回答
1

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

于 2012-05-16T15:59:13.230 回答
0

检查查询的执行计划。

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

否则尝试重建表和表的索引create statistics

于 2012-05-16T11:25:28.000 回答
0

您在开发中运行什么版本的 SQL Server,以及在生产中运行什么版本。执行 aDBCC TRACESTATUS(-1);以确定 dev 与 prod 中的标志。确保这些没有区别。我已经看到了一些问题,当他们这样做时,性能问题会出现在一个中,但不会出现在另一个中。

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

于 2012-06-22T03:05:52.137 回答