怎样设置graphd超时?

  • nebula 版本:源代码编译,nebula-graph master分支 4a1d4b5,nebula-common master分支 3762e53,nebula-storage master分支 9a89f35
  • 部署方式 单机 :
  • 硬件信息
    • 磁盘 HDD
    • CPU 32核
    • 内存 500GB
  • 问题的具体描述:
    步骤
  1. 使用python客户端进行一条语句的查询,graphd配置–storage_client_timeout_ms为10800000,3个小时之后客户端卡死,graphd日志中没有出现storage超时的记录,然后top发现graphd CPU占用率100%
  2. 把python客户端程序kill掉
  3. 再次使用python客户端进行同样的查询,发现graphd CPU占用率变成200%
  4. 再次把python客户端程序kill掉
  5. 第三次使用python客户端进行同样的查询,发现graphd CPU占用率变成300%

看这现象,是不是把python客户端断掉之后,graphd仍然在执行之前发送给它的查询语句啊?怎样让它在指定的时间内超时呢,而不是一直占用CPU?

请求已经发给graphd服务了,把客户端程序kill掉 请求在graphd端还是继续执行的。

把下面这个配置设置小点呢

慢请求没有办法杀掉。
如果是想跑类似twitter 2010这种的case,不要给python客户端返回大数据量,另外估计运行时间要很久很久。

  1. 更改storage_client_timeout_ms在生产环境中不是可持续方案吧,即使可以解决当前问题的话,不同的查询会需要不同的超时时间,而更改配置的话是需要对数据库服务进行操作的,而且影响全局配置
  2. 当前这个测试返回给python客户端的数据只有1万条,两个string字段,不算大吧?慢请求具体是只什么呢?
  3. 有没有一个从客户端设置超时时间的方案呢?或者说客户端停掉之后,有没有一种机制保证后台查询也能停止,而不是持续占用服务器资源?

现在还不支持终止一个正在运行的查询。
客户端 → graph → storage
虽然客户端停了,但是 graph 和 storage 还是会处理数据。

@steam 记一个需求?支持从客户端终止一个正在运行的任务,或者单个查询任务可以设置超时。

1 个赞

今年的 roadmap 中会有慢查询的优化,包括但不仅限于手动终止查询的执行,限制查询使用的资源数量(第一阶段线程数,后续会对内存等做进一步的限制)。

返回给客户端的数据量不代表中间计算涉及到的数据量,所以一个查询慢不慢还是要看在每一步的计算量。

修改 timeout 肯定不是好的选择,不知道你的场景怎样,是不是有 AP 的需求?nebula graph 目前还只是针对 TP 场景设计,如果一个 query 涉及到的数据量大到全图(全图的数据量也比较大),可能需要考虑使用类似 GraphX 等工具来计算。

而且看你使用的是单机大内存 HDD 配置,将来的纯内存的存储可能更适合你的场景(这个也在 roadmap 中)。