- nebula 版本:源代码编译,nebula-graph master分支 4a1d4b5,nebula-common master分支 3762e53,nebula-storage master分支 9a89f35
- 部署方式 单机 :
- 硬件信息
- 问题的具体描述:
步骤
- 使用python客户端进行一条语句的查询,graphd配置–storage_client_timeout_ms为10800000,3个小时之后客户端卡死,graphd日志中没有出现storage超时的记录,然后top发现graphd CPU占用率100%
- 把python客户端程序kill掉
- 再次使用python客户端进行同样的查询,发现graphd CPU占用率变成200%
- 再次把python客户端程序kill掉
- 第三次使用python客户端进行同样的查询,发现graphd CPU占用率变成300%
看这现象,是不是把python客户端断掉之后,graphd仍然在执行之前发送给它的查询语句啊?怎样让它在指定的时间内超时呢,而不是一直占用CPU?
请求已经发给graphd服务了,把客户端程序kill掉 请求在graphd端还是继续执行的。
把下面这个配置设置小点呢
慢请求没有办法杀掉。
如果是想跑类似twitter 2010这种的case,不要给python客户端返回大数据量,另外估计运行时间要很久很久。
现在还不支持终止一个正在运行的查询。
客户端 → graph → storage
虽然客户端停了,但是 graph 和 storage 还是会处理数据。
@steam 记一个需求?支持从客户端终止一个正在运行的任务,或者单个查询任务可以设置超时。
1 个赞
yee
6
今年的 roadmap 中会有慢查询的优化,包括但不仅限于手动终止查询的执行,限制查询使用的资源数量(第一阶段线程数,后续会对内存等做进一步的限制)。
返回给客户端的数据量不代表中间计算涉及到的数据量,所以一个查询慢不慢还是要看在每一步的计算量。
修改 timeout 肯定不是好的选择,不知道你的场景怎样,是不是有 AP 的需求?nebula graph 目前还只是针对 TP 场景设计,如果一个 query 涉及到的数据量大到全图(全图的数据量也比较大),可能需要考虑使用类似 GraphX 等工具来计算。
而且看你使用的是单机大内存 HDD 配置,将来的纯内存的存储可能更适合你的场景(这个也在 roadmap 中)。