graphd 服务查询挂掉

nebula 3.0.0 在做一个数据量比较大的查询的时候会graphd服务会挂掉,查询也无法顺利执行,查看日志发现报错内存不足,请问这样就是无法执行这个查询吗?有没有办法可以看到需要多少内存?

Memory usage has hit the high watermark of system, available: 3.99081e+08 vs. total: 1.34661e+11 in bytes.
W20220622 11:20:58.164331 38430 MemoryUtils.cpp:79] Memory usage has hit the high watermark of system, available: 3.63557e+08 vs. total: 1.34661e+11 in bytes.
W20220622 11:22:38.164403 38430 MemoryUtils.cpp:79] Memory usage has hit the high watermark of system, available: 3.73535e+08 vs. total: 1.34661e+11 in bytes.
W20220622 11:24:18.165807 38430 MemoryUtils.cpp:79] Memory usage has hit the high watermark of system, available: 4.02395e+08 vs. total: 1.34661e+11 in bytes.
W20220622 11:25:58.165757 38430 MemoryUtils.cpp:79] Memory usage has hit the high watermark of system, available: 3.6649e+08 vs. total: 1.34661e+11 in bytes.
W20220622 11:27:38.166309 38430 MemoryUtils.cpp:79] Memory usage has hit the high watermark of system, available: 3.63815e+08 vs. total: 1.34661e+11 in bytes.
W20220622 11:29:18.164100 38430 MemoryUtils.cpp:79] Memory usage has hit the high watermark of system, available: 4.0011e+08 vs. total: 1.34661e+11 in bytes.

看下文档。一般来说你可以带着报错信息去搜搜论坛和文档

1 个赞

@Pro@steam 所说,确实是达到了watermark导致的。
能否贴下你的查询语句和执行计划,我们也看下后面在内存这块有没有优化空间。

1 个赞

语句是MATCH p=(v)-[e:support*1…5]->(v2)
WHERE id(v) IN [“passenger_10709”]
RETURN COUNT(v2)

执行计划


如果在无法扩展内存的情况下?还有别的办法可以成功执行这个查询吗?

因为看到文档中只能是调高阈值,设置成0.95之后还是无法成功执行。

机器配置贴一贴呢,还有大概的数据量。

机器的配置是128G内存,数据量结点数是5500万左右,边数量在2亿6千万左右

有什么解决办法吗,或者说在配置文件中有没有可以优化的地方

可以通过简单地修改语句触发属性裁剪优化:

MATCH p=(v1)-[e:support*1..5]->(v2)
WHERE id(v1) == "passenger_10709"
WITH v1.passenger.age AS age1, v2.passenger.age AS age2
RETURN count(*)

以上语句变量 v1/v2 只会从存储层拉取 age 属性,对于点属性多的情况可能会有比较明显的优化。因为属性裁剪的实现没有考虑到具体表达式的情况,所以目前只能通过上述比较 tricky 的方式来解决,你可以先测试下效果。我提了 issue 来追踪属性裁剪的问题: https://github.com/vesoft-inc/nebula/issues/4385,可以关注下。
配置方面把内存水位设高就可以。

如果用go的话内存消耗会比match少一些吗?

嗯。

此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。

浙ICP备20010487号