kill query无法杀掉查询

提问参考模版:

  • nebula 版本:3.6.0
  • 部署方式:分布式
  • 安装方式:RPM
  • 是否上生产环境:Y
  • 硬件信息
    • SSD磁盘
    • 一台16C64G放storaged+metad
    • 一台32C128G放graphd
  • 问题的具体描述
  • 相关的 meta / storage / graph info 日志信息(尽量使用文本形式方便检索)
    • 执行6层FIND NOLOOP PATH后,kill query即使返回error_code = 0,但也无法立刻杀掉查询
    • 10:52:00 通过studio执行查询
    • 10:52:13 通过python client执行kill,返回error_code = 0
    • 期间,查询仍然在进行,甚至两台物理机cpu偶尔会全满,导致通过python client再执行kill query报错socket超时
    • 10:55:47 graphd日志才出现Execution had been killed

感觉这不是studio问题,最好目录挂上内核问题。你内核内存水位设置的多少?然后最好贴一下查询语句,以及大致数据量

不好意思,确实是内核问题,但我目录里没有找到内核的分类。

水位线:
–system_memory_high_watermark_ratio=0.8

查询语句:

explain FIND NOLOOP PATH WITH PROP FROM "COM_08a9cf509a4cae0afe4f64210939a49d","COM_397af4a4bc09460e79985e2fc7c8a41c" TO "COM_08a9cf509a4cae0afe4f64210939a49d","COM_397af4a4bc09460e79985e2fc7c8a41c" OVER has_address,has_email,has_phone,is_branch,is_employee,is_legal_person,is_partner_std BIDIRECT WHERE (has_address.use_flag IS EMPTY OR has_address.use_flag == 0)  AND  (has_email.use_flag IS EMPTY OR has_email.use_flag == 0)  AND  (has_phone.use_flag IS EMPTY OR has_phone.use_flag == 0)  AND  (is_branch.use_flag IS EMPTY OR is_branch.use_flag == 0)  AND  (is_employee.use_flag IS EMPTY OR is_employee.use_flag == 0)  AND  (is_legal_person.use_flag IS EMPTY OR is_legal_person.use_flag == 0)  AND  (is_partner_std.use_flag IS EMPTY OR is_partner_std.use_flag == 0)  UPTO 7 STEPS   YIELD path as paths | LIMIT 50 | YIELD nodes($-.paths) AS ns, relationships($-.paths) AS es ;

目前我们需要做最多50家公司之间找关系,语句有优化的空间吗?

数据量:
返回数量是50。目前没有做limit下推吧?比如5层就有50行不会提前返回,实际计算时还是会把6层找关系全部计算完

  1. 如果某个算子已经下发到 storage 的话,是kill不掉的; 得等下发到 storage 的算子执行完;
  2. 这里你有很多的 where 条件,下推也没啥用。都得取上来做过滤才行

其他:
“最多 50 家”怎么理解?是50 家公司之间两两找路径,还是你例子中的 2 个公司之间找路径,最多找 50 条记录?

您好,最多50家公司 指的是 FIND NOLOOP PATH WITH PROP FROM xxx TO xxx OVER 里面的xxx最多有50个;LIMIT 50这个是另一个限制啦。
请问有什么好办法可以保证找关系这种图服务稳定吗?目前我的想法是,单独检测慢查,然后kill掉,但是目前测下来没有达到预期。

with prop 去掉应该会好些