nebula持续入库的性能不稳定

为了更快地定位、解决问题,麻烦参考下面模版提问 ^ ^

提问参考模版:

  • nebula 版本:2.0 beta
  • 部署方式(分布式 / 单机 / Docker / DBaaS):Docker
  • 硬件信息
    • 磁盘( 必须为 SSD ,不支持 HDD):SSD
    • CPU、内存信息:40C 126G
  • 出问题的 Space 的创建方式:执行 describe space xxx;
  • 问题的具体描述

我在使用go-importer进行数据导入过程中遇到了入库性能不稳定的情况,问题描述如下:
1、我将json源数据拆出一个点持续实时入库,该点的schema如下:

CREATE TAG IF NOT EXISTS process(pid int, pguid string, pname string DEFAULT “”, path string DEFAULT “”, uid int DEFAULT -1,
uname string DEFAULT “”, gid int DEFAULT -1, gname string DEFAULT “”, md5 string DEFAULT “”, cmd string DEFAULT “”,
euid int DEFAULT -1, suid int DEFAULT -1, fsuid int DEFAULT -1, egid int DEFAULT -1, sgid int DEFAULT -1, fsgid int DEFAULT -1,
euname string DEFAULT “”, egname string DEFAULT “”, session_guid string DEFAULT “”, tty string DEFAULT “”, fsize int DEFAULT -1,
fmode string DEFAULT “”, finode int DEFAULT -1, funame string DEFAULT “”, fgname string DEFAULT “”, fatime int DEFAULT -1,
fmtime int DEFAULT -1, fctime int DEFAULT -1, os string DEFAULT “”, new_pid int DEFAULT -1, created_time int DEFAULT -1, exit_time int DEFAULT -1,
cmd_id string DEFAULT “”, cmd_chinese_desc string DEFAULT “”, cmd_level string DEFAULT “”, cmd_score int DEFAULT -1, cmd_regex string DEFAULT “”,
completeness int DEFAULT -1, agent_ip string DEFAULT “”, agent_id string DEFAULT “”, host_name string DEFAULT “”);

2、我的导入程序与nebula建立了16个连接(每个连接使用一个goroutine持续入库),这16个连接作为消费者从点的入库语句集合中获取入库语句进行插入,连接的goroutine与前端直接没有缓存,同步的生产与消费;
3、程序刚启动时,导入程序可以稳定的按8万/秒的速率入库,但是经过1分钟或者更长时间后,导入速率开始出现向下的波动,基本每秒速率降到5万/秒,偶尔还有2万/秒的时候;
3、在入库速率稳定在8万/秒时,连接池中的goroutine有些还是空闲的,而出现大范围波动时,几乎所有goroutine都停在等待rpc的响应那里;

请问这种现象是nebula自身的某种机制导致的吗,有没有方法可以保持入库速率稳定在高点呢?

compaction 关了吗?

没有配置过这项,默认是开启的吗

嗯 默认应该是开了的

这个怎么配置关闭呢?

下面这条配置可以关闭:

UPDATE CONFIGS storage:rocksdb_column_family_options = { disable_auto_compactions = true };

1 个赞

@yee 我记得v1是默认goimporter会去关闭的,这个v2的行为改了吗

我把auto compact关掉后入库速率稳定下来了

1 个赞

https://docs.nebula-graph.com.cn/manual-CN/3.build-develop-and-administration/5.storage-service-administration/compact/

现在 compact 的配置,可以在配置中的 postStart 字段进行指定,可以参看 example.yaml