我有一个用于生成报告的 xquery,它有时会在地图中保存大约 500K uris,并检查它们在数据库中是否存在(cts:search
with cts:document-query
)并返回差异。但是,如果我们用并发请求访问同一个 E 节点,响应时间会变慢。
内存大小映射可以消耗是否有上限?在任何情况下都可以将地图交换到磁盘吗?
我有一个用于生成报告的 xquery,它有时会在地图中保存大约 500K uris,并检查它们在数据库中是否存在(cts:search
with cts:document-query
)并返回差异。但是,如果我们用并发请求访问同一个 E 节点,响应时间会变慢。
内存大小映射可以消耗是否有上限?在任何情况下都可以将地图交换到磁盘吗?
您可以将地图作为 xml 存储在数据库本身中,但您仍然需要将其加载到内存中才能使用它。您也可以将它们存储为服务器字段,但仍需要将其加载到内存中。不过,如果使用 500k 条目构建地图需要相当长的时间,那么这样做可能是值得的。另一方面,您将如何跟踪地图是最新的?
您可以通过管理服务器查看每个林使用的内存量。转到森林,单击状态选项卡,然后向下滚动到底部。“内存大小”是映射文件大小的总和。您还可以使用xdmp:forest-status
XQuery 程序收集这些信息。
内存消耗受操作系统地址空间及其虚拟内存限制(可用交换空间)的限制。如果服务器内存消耗超过可用物理内存,操作系统会将页面交换到磁盘。这会对性能产生严重影响。因此,请监控操作系统交换利用率,看看这是否可能是导致速度变慢的原因。