执行lookup on语句时报错:-1005:StorageMemoryExceeded: (-3600)

v3.4.1

使用场景:寻找符合这些属性的点
限制limit时可以正常返回:
LOOKUP ON person WHERE person.aa==1 AND person.bb==1 YIELD id(vertex) | LIMIT 50;
LOOKUP ON person WHERE person.aa==1 AND person.bb==1 YIELD id(vertex) .age| LIMIT 50;

不加limit
LOOKUP ON person WHERE person.aa==1 AND person.bb==1 YIELD id(vertex) ;
报StorageMemoryExceeded错误,无法生成java arraylist.但是使用场景需要返回所有符合的点

nebula3.4.1版本

内存不够了。

考虑通过各种手段实现分页吧。

我现在是4*256G的机器,我刚跑一个lookup语句大概能返回3千万的数据,内存只增长了十几G 还有100多G都没使用到

创建的索引是复合 person.aa 和 person.bb 的么?

不是复合索引,都是单独索引

单独索引的话,这个复合条件没法下推,会触发全扫描,建议创建一个复合索引。

复合索引是从左到右的,所以 (aa, bb) 的索引可以支持 aa 或者 (aa && bb) 条件的过滤

我这个查询条件不是固定,基于上一步生成的,可能是3个 5个,可能只有1个,请问这样复合索引怎么建呢

然后我刚测试了单个索引的,也是StorageMemoryExceeded

这个查询模式是非图的,确实不太适合,你的完整需求是做什么样的查询呢?用 storage client 也许更适合一些统计查询。

import com.vesoft.nebula.client.graph.data.ResultSet;
import com.vesoft.nebula.client.graph.net.NebulaPool;
import com.vesoft.nebula.client.graph.net.Session;

public class StorageExample {
public static void main(String[] args) {
NebulaPool pool = new NebulaPool();
pool.init(“127.0.0.1:3699”); // 替换为实际的 Nebula Graph Storage 服务地址和端口

    Session session = pool.getSession("username", "password"); // 替换为实际的用户名和密码

    String query = "YOUR_NGQL_QUERY"; // 替换为实际的 NGQL 查询语句

    ResultSet result = session.execute(query);
    while (result.hasNext()) {
        System.out.println(result.next());
    }

    session.release();
    pool.close();
}

}

开发代码和上面这段类似,就是lookup语句传到query里面执行,就溢出了

如果是 lookup 条件过滤掉很少,tag 下总量非常大的场景,可以考虑 storageclient 扫 tag

https://github.com/vesoft-inc/nebula-java/blob/master/examples/src/main/java/com/vesoft/nebula/examples/StorageClientExample.java

好的 谢谢。我试试


请问按照.StorageClient去处理的时候,还是会报错,麻烦再帮忙看看

nebula-storaged.conf中的memtracker配置改过吗?

1 个赞

–memory_tracker_limit_ratio=3
–memory_tracker_untracked_reserved_memory_mb=50
–memory_tracker_detail_log=falseds
–memory_tracker_detail_log_interval_ms=60000
–memory_purge_enabled=true
–memory_purge_interval_seconds=10
–enable_partitioned_index_filter=true

这是我的参数配置

奇怪,这是把mem tracker关掉了啊

代码里这个不对啊,应该是填metad的地址和端口。