由于遍历警告和索引使用效率低下导致DAM资产查询性能问题
Adobe Experience Manager (AEM) DAM资源查询在大型结果集、不受支持的查询语法、无效的索引选择或查询过滤器不足导致过多节点遍历时变得缓慢、超时或失败。 该问题影响Query Builder查询、SQL2查询、调度程序作业、API端点和DAM资产搜索性能。 要解决此问题,请优化查询、改进索引并减少遍历。
描述 description
环境
Adobe Experience Manager as a Cloud Service (AEMaaCS)
问题/症状
- 查询超时或返回*“索引遍历的节点过多”*警告。
- 由于Oak转换不支持的LIMIT语法,SQL2查询因解析错误而失败。 例如,
LIMIT 1变为LIMIT(*)1,从而导致ParseException。 - 当大型DAM路径触发大量遍历时,查询生成器端点会返回服务中断响应。
- 说明查询输出未显示索引用法,并显示使用的索引:无。
- 针对大型DAM路径(如
/content/dam/...)的查询需要数百秒的时间,或者在使用p.limit=-1时挂起。
根本原因
出现此问题的原因是,没有足够筛选器的大型DAM查询强制Oak扫描过多节点。 不支持的SQL2 LIMIT/OFFSET语法、无效的索引选择、不受支持的条件(如IS NULL)以及无限制的结果集妨碍了索引的有效使用。 未优化查询时,大型文件夹层次结构还可能导致HTTP超时、资源耗尽和遍历警告。
解决方法 resolution
请按照以下步骤识别查询问题并提高DAM查询性能:
- 通过查看日志、Query Builder Debugger结果、查询性能输出和说明查询结果来确定查询失败类型。
- 在查询大型DAM层次结构时,通过使用合理的限制替换
p.limit=-1并缩小查询范围来减少大型结果集。 - 将不支持的SQL2 LIMIT/OFFSET语法替换为支持的语法,如
OPTION(LIMIT 1),并在需要时使用查询生成器分页。 - 查看说明查询输出,并确认查询使用预期的DAM索引而不是回退索引。
- 当Explain查询显示不正确的索引选择时,强制使用相应的索引标记。 例如,需要时添加
option(index tag assetsOmnisearch)。 - 删除或重新构建阻止索引使用和强制遍历的IS NULL条件。
- 当DAM层次结构包含非常大的文件夹结构时,将查询拆分为较小的子查询。 例如,按子文件夹划分查询,而不是查询包含成千上万个资产的单个路径。
- 添加其他元数据过滤器,如日期、资源类型或其他索引属性,以减少扫描的节点数并改善索引适用性。
- 通过重新运行查询、查看Explain查询输出、确认正确的索引使用以及确保遍历警告和超时不再发生来验证解决方案。
何时上报
- 应用查询限制和过滤器后,遍历警告会继续出现。
- Explain查询在查询优化后继续显示索引使用情况。
- 更正查询后,支持的SQL2语法仍然失败。
- 在优化和索引验证后,查询生成器端点继续返回服务中断错误。
experience-cloud-kcs-help-kbarticles