Dynamics AX 预加载行为

4

问题

  • 用户选项preload是指在客户端还是服务器上缓存?

  • 有没有办法异步执行此操作,使得当用户首次请求表格数据时不会受到较大的性能影响?

更多信息

在 Dynamics Ax 2012 中,在文件>用户选项>Preload下,用户可以选择第一次访问时预加载哪些表。

我没有找到任何关于这种行为是与客户端缓存还是AOS相关的信息。

  • 它是一个用户设置,意味着它是客户端。
  • 但它也可能是一个AOS设置,其中启用此选项的用户会承受预加载整个表的初始影响,而那些没有该选项的用户会从其他用户引起的任何缓存中受益,但不会触发该加载本身。

如果是后者,我们可以通过将此选项从所有(人类)用户中删除,仅在我们的批处理用户帐户上启用它,并在每个AOS上安排作业以请求每个表中的记录,从而触发预加载而不会对任何用户产生负面影响,从而提高性能。

参考:http://dynamicbusinesssolutions.ru/axshared.en/html/9cd36702-2fa7-470c-a627-08


2
不是答案,但也许有一些有用的信息:根据预加载帮助文档,预加载仅适用于具有“EntireTable”CacheLookup属性的表。根据《Microsoft Dynamics AX内部》书籍,“EntireTable”仅是服务器端缓存。如果在客户端层面开始对这样的表进行查询,则该表的缓存将被处理为“Found”表缓存。 - FH-Inway
1
您的链接无法使用。 - Jan B. Kjeldsen
1个回答

2
如果一个表很大或经常更改,则不适合作为整个表缓存的候选项。这适用于普通用户和批处理用户。
EntireTable缓存位于服务器上,但是负载是由用户发起的,第一个执行select的用户会受到性能影响。
要成功禁用预加载表,您可以使用Admin用户禁用它,这将适用于所有用户。或者您可以让所有用户自行禁用它。
就个人而言,我从不更改用户设置。如果表很大,我会将表的CacheLookup属性更改为自定义设置。
请参见基于集合的缓存:See Set-based Caching
当您将表的CacheLookup属性设置为EntireTable时,第一次选择后表中的所有记录都会被放置在缓存中。这种类型的缓存遵循单个记录缓存的规则。这意味着SELECT语句WHERE子句必须包括唯一索引中所有字段的等式测试,该索引在表的PrimaryIndex属性中定义。
EntireTable缓存位于服务器上,并由连接到应用程序对象服务器(AOS)的所有连接共享。如果在客户端层对EntireTable缓存的表进行选择,则首先查找其自己的缓存,然后搜索服务器端的EntireTable缓存。
每个公司的每个表都创建了一个EntireTable缓存。如果对不同公司的同一表进行两次选择,则整个表会被缓存两次。
注意:避免为大型表使用EntireTable缓存,因为一旦缓存大小达到128 KB,缓存就会从内存移动到磁盘。磁盘搜索比内存搜索慢得多。

谢谢Jan;这与在客户端缓存不同,它关系到AOS上的缓存/我应该能够创建一个批处理作业,在第一个用户访问它们之前预先加载这些表,以避免对该用户造成不必要的性能影响。 - JohnLBevan
如果你为每个AOS都这样做,它会起作用,但是你又走错了方向。如果表包含数千条记录,则不应缓存“EntireTable”(但可以缓存“Found”)。如果它包含的记录较少,则性能损失将可以忽略。实际上,通过填充未使用的记录来填充内存,可能会降低性能。 - Jan B. Kjeldsen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接