Nebula2.6.1 单机版查询性能问题

  • nebula 版本:
  • 部署方式:单机
  • 安装方式:tar包
  • 是否为线上版本:N
  • 硬件信息
    • 磁盘:2T SSD
    • CPU、内存信息:32core,256G内存

想请问一下单机版和分布式在性能方面差异有多大,目前我们自己部署了单机版:
配置情况:32核,256G内存,2T SSD磁盘
导入数据量:2亿+节点,3.2亿+边

我们在实际查询过程中,发现单机性能比较差,例如:

LOOKUP ON NIK WHERE NIK.nik_age > 50 YIELD properties(vertex).idcard, properties(vertex).nik_age | limit 10;

就这样一条语句,我们将响应时间设置为10分钟,都无法返回查询结果,MATCH查询性能更差,因此想知道是单机版的原因还是图库索引的问题,因为同样数据量在Neo4j单机版中查询中完全可以正常返回结果。请各位大神赐教,感谢:pray:

从描述看,你其实是进程部署在一台机器上,是单机分布式部署,所以一定会出现进程间交互,性能是按照分布式来考虑的。在2022年2月份左右,我们会发布一个真正的单机版,到时性能会提升不少的。

1 个赞

目前 取点的属性,不建议 使用 properties(vertex).idcard 这种形式, 还没做相关的优化, 这种形式会取点上的所有属性, 可以使用 NIK.idcard 这种形式,这样就只取 idcard这个属性,不会取其他属性

1 个赞

查询性能虽有所提升,但对于数据量较大时依然不明显

那就是说,对于单机版,面对数据量较大时,这种扫描TAG的查询方式,目前没有办法解决是吗?

你创建图空间的时候 分区数目是多少啊,
可以在graph.conf配置 --query_concurrently=true
这样每个取数据的时候 每个分区都有一个线程捞数据,否则的话是单线程捞数据
可能会加快一点速度

1 个赞

分区数=10,我看官文上介绍说,分区数设置跟集群磁盘个数有关,一般成5倍,因为我是单机版,所以建图空间时,设置分区数=10。关于graph.conf配置 --query_concurrently=true,我可以试一下,谢谢哈~

您好,请问关于图空间分区数量设置,有什么好的建议吗?数据量比较大的时候,是否将图空间分区数设置较大对查询效率会有所提升?

不是分区数越大对查询效率越高的, 按照文档上指导的配置就好了

嗯呢,目前graph.conf配置 --query_concurrently=true,分区数=10,但类似 LOOKUP ON NIK WHERE NIK.nik_age > 50 YIELD NIK.idcard, NIK.nik_age | limit 10; 这样查询10分钟内依然无法响应,请问还有什么其他设置或优化可以提高查询效率吗?

你可以 profile 一下, 可以看看 1、 哪些算子占用的时间高, 2、看看limit下推起作用没有
另外你的数据量是多大的

1 个赞

好的,我看一下,目前导入的数据量:2亿+节点,3.2亿+边

这个问题已经帮你定位了哦,age上加索引后,索引和limit下推都生效,查询延时降为几秒钟

2 个赞

嗯呢了解,目前管道问题如何解决?你们有好的建议吗?

可以把管道语句的explain/profile发下看看吗?

辛苦帮忙看看,下面是随便一条带有管道查询的命令explain的结果:
nebula-case02.txt (113.0 KB)

方便再发下profile吗,看下执行时间

执行过,1个多小时过去了都没出结果,已经终止

Hi,我看了下explain的结果,最后才做limit,所以是要扫描完所有的数据才会返回前10条结果,肯定会很慢。建议如下:
1、把最后limit前面的管道符去掉,执行一下explain,看limit是否会下推
2、如果还是不行,可以尝试根据业务逻辑,在管道前做拆分,然后再通过多个graphd并发执行。


3、可以尝试在管道前做limit,然后再执行管道语句。

  1. 去掉最后limit前面的管道符,语法不对吧,直接报错;
  2. 我现在安装的是单机版,meta、graphd、storages 都在一个节点上,我理解应该是不能并发执行吧;
  3. 我知道在管道前加limit性能可以,但是我请教一下,如果我想返回路径, 并且不指定具体起点,类似match操作的:match p = (n: NIK) - [r*1…2] - () return p limit 10; 请问这种不采用match(因为Nebula中match性能更差)而采用原生的nGQL 可以实现吗?