Foxx arangodb运行到内存限制

Foxx arangodb运行到内存限制,arangodb,aql,foxx,Arangodb,Aql,Foxx,我在foxx中运行了一个简单的查询 For u in collection Filter u.someIndexedSparseFiler !=null Return {_id:u._id} 这将返回数百万以上的结果。在日志中,arango有一条到达有限内存堆的消息,并终止进程 reached heap-size limit of #3 interrupting V8 execution (heap size limit 3232954528, used 3060226424) during

我在foxx中运行了一个简单的查询

For u in collection
Filter u.someIndexedSparseFiler !=null
Return {_id:u._id}
这将返回数百万以上的结果。在日志中,arango有一条到达有限内存堆的消息,并终止进程

reached heap-size limit of #3 interrupting V8 execution (heap size limit 3232954528, used 3060226424) during V8 internal collection

即使我在启动中添加了标志-javascript.v8-max-heap 3000。它仍然在相同的错误中运行。我该怎么办?有比这更好的方法吗?我不知道为什么会出现内存不足错误,但看起来返回的数据溢出了V8堆大小。另一种可能是,某些情况导致引擎错过/忽略索引,导致引擎在评估
someIndexedSparseFiler
属性之前加载每个文档

评估数以百万计的文档(或大量大型文档)不仅需要大量的磁盘/内存I/O,而且还需要大量的RAM。尝试使用该功能返回查询分析-它会告诉您出了什么问题

作为比较,我的问题

myCollection中u的

过滤器u.someIndexedSparseFiler!=无效的
返回u.\u id
…单击“解释”时返回此信息:

查询字符串(82个字符,可缓存:true):
在myCollection中为u
过滤器u.someIndexedSparseFiler!=无效的
返回u.\u id
执行计划:
我的名字是NodeType。评论
1个单节点1*根
7 IndexNode 5-对于myCollection/*持久索引扫描中的u,投影:``u id`*/
5 CalculationNode 5-LET#3=u.`#id`/*属性表达式*/*使用的集合:u:myCollection*/
6返回节点5-返回#3
使用的索引:
按名称类型集合唯一稀疏选择性字段范围
7 idx_1667363882689101824持久性myCollection false true 100.00%[`someIndexedSparseFiler`]*
应用的优化规则:
Id规则名
1将计算向上移动
2向上移动过滤器
3上移计算2
4向上移动过滤器2
5使用索引
6取下索引覆盖的过滤器
7移除-不必要的-计算-2
8将提取减少到投影
请注意,它在
使用的索引下列出了我的稀疏索引:
。另外,请尝试更改
=
==
,您将看到现在它忽略了索引!这是因为优化器知道稀疏索引永远不会有
null
值,所以它会跳过它

如果您不熟悉它,“解释”功能在调优查询和创建索引时非常有用(实际上是必不可少的)。另外,请记住索引应该与查询匹配;在这种情况下,索引应该只有一个属性,否则“选择性”商可能太低,引擎将忽略它