nebula-importer导入数据时数据量几万时就会报错缓冲区已满,重复几次后可以把数据导入到数据库内,查询时利用match返回路径,三四分钟才会返回,偶尔还会超时

提问参考模版:

  • nebula 版本:nebula-graph-3.4.0
  • 部署方式:分布式 三台服务器
  • 安装方式:rpm
  • 硬件信息
    • CPU:Intel(R) Xeon(R) Gold 5320 CPU @ 2.20GHz
      硬盘:Disk /dev/sda: 1999.8 GB, 1999844147200 bytes, 3905945600 sectors
      问题描述:
  • 使用nebula-importer导入csv文件,配置文件部分配置如下:
version: v3
description: example
removeTempFiles: false
clientSettings:
  retry: 3
  concurrency: 128 # number of graph clients
  channelBufferSize: 5000
  space: graph_1697595549544_0_23240003
……

导入时,就会报错,报错信息部分如下:

nebula-graphd.ERROR:
E20231020 03:39:07.413750 90324 QueryInstance.cpp:151] Storage Error: Not the leader of 18. Please retry later., query: INSERT EDGE `follow`(`created_time`,`file_type`,`count`,`type`,`indexType`,`distance`) VALUES ……

后面会跟一大串的导入文件数据,文件中的数据和配置文件是对应的,重新导入,也会慢慢全部导入到库里,但是之后的查询会非常慢,差不多四万点、一万多的边
查询此语句

MATCH (v:node)-[e]-(v2) where (v.node.dataType == "2" OR v.node.dataType == "5") AND v2.node.dataType == "5"  return v, e, v2

几乎是三四分钟才会查询出结果,偶尔还会出现超时

:thinking: 所以你是导入速度比较慢,以及 MATCH 语句查询慢,两个问题么?

对的,导入的时候会报错,大部分会提示1005:Storage Error: part: 9, error: E_LEADER_LEASE_FAILED(-3531).这个错误,缓冲区满了

这个帖子你可以读一读,总结下大概就是:

  1. 查看你的 partition 配置;
  2. 减小 importer 并发数
  3. 关闭 compaction,以及你导入之前是否创建了索引(有索引导入数据会比较慢)

以及,如果是查询语句过慢的话,参考这个帖子

看下生成的执行计划。

看了问题是storaged出现了问题,报这个错误:
Thrift serialization is only defined for structs and unions, not containers thereof. Attemping to deserialize a value of type nebula::HostAddr.
三个storaged其中一个就会呈现offline状态,然后show hosts中也会出现一个是offline

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