【AEM Daily】慢查询 Traversed 阈值限制设置

【关于AEM】

Adobe Experience Manager (AEM)

一个将 Content Management System (CMS)与 Digital Asset Management (DAM)的强大功能相结合的企业级应用

【正文】

在AEM中执行一句查询语句的时候,会发现没有返回结果

查看日志或者在CRXDE里用语句进行调试,会看到如下提示

【AEM Daily】慢查询 Traversed 阈值限制设置

如果是在日志里将会是

*WARN* ... java.lang.UnsupportedOperationException: The query read or traversed more than 100000 nodes. To avoid affecting other tasks, processing was stopped.

意思就是字面的意思 你这个查询读取或遍历了超过100000个节点。为避免影响其他任务,已停止处理

AEM默认的节点读取遍历阈值是 100000,内存节点读取阈值是 500000

这个阈值,可以通过以下方式来设定

  • AEM6.1-AEM6.2

        对于6.1和6.2的版本,这个阈值的设置,必须通过JVM的启动参数来配置

        也就是意味着,要重设这个阈值,必须重启AEM

        JVM启动参数分别为

        -Doak.queryLimitInMemory = 500000

        -Doak.queryLimitReads = 100000

  • AEM6.3 +

        对于6.3及以上版本,就可以不必重启AEM,就可以重设这个阈值

        可以通过OSGI Configuration中的 Apache Jackrabbit Query Engine Settings Service 来进行配置

        如下图

【AEM Daily】慢查询 Traversed 阈值限制设置

【写在最后】

如果AEM的版本是6.3及以上的话

AEM的默认JVM启动参数里是不包含 -Doak.queryLimitInMemory -Doak.queryLimitReads 这两个属性的

如果你在启动的时候,自己手动添加了这个属性的话

你再通过OSGI Configuration中的 Apache Jackrabbit Query Engine Settings Service 来配置的话

是不会生效的,JVM的参数的优先级,大于OSGI Configuration