MarkLogic读取单文档时触发XDMP-EXPNTREECACHEFULL异常原因咨询
MarkLogic XDMP-EXPNTREECACHEFULL 问题解答
1. 双环境差异排查项
你可以按以下优先级逐一核对两个环境的配置差异:
- 单查询扩展树缓存上限:扩展树总缓存8GB不代表单查询可以占用全部空间,检查第二个环境的
expanded tree cache max size单查询阈值配置,若该值被误设为低于10MB,很容易触发该错误,该配置独立于总缓存大小。 - 索引与元数据配置:核对两个环境的数据库索引差异,检查第二个环境是否为
entry元素或其属性额外开启了实时索引、细粒度权限继承、自定义片段规则,额外的索引元数据会大幅提升文档加载时的内存占用,远超出原始XML大小的常规膨胀倍率。 - 缓存碎片与并发负载:排查第二个环境触发错误时的运行时负载,是否存在其他长期运行的大查询占用了大部分扩展树缓存,导致剩余缓存没有足够的连续块分配给当前文档加载,总剩余空间足够不代表连续可用空间足够。
- 版本与文档元数据差异:核对两个环境的MarkLogic小版本号,部分历史版本存在扩展树内存计算的已知bug;同时用
xdmp:document-properties("large-table.xml")对比两份文档的隐藏属性、处理指令等差异,确认导入后的文档实际结构完全一致。 - 缓存分区配置:确认8GB总缓存的6个分区分配是否均衡,若存在分区大小异常,也可能导致单分区空间不足触发报错。
2. 单文档节点量级规范说明
15000个同级节点、原始大小不足5MB的单文档,本身完全符合MarkLogic的设计规范,远低于默认单文档512MB的硬限制,你此前稳定运行数月的状态也验证了这一点。
但该设计不属于最佳实践,后续如果业务量级增长(单文档超过50MB、entry数量超过10万),建议拆分为多文档存储,可避免单文档更新锁冲突、扩展树缓存占用过高的问题。
内容的提问来源于stack exchange,提问作者BenW
相关产品推荐
相关产品推荐

