如何列出正在运行的gremlin查询?如何取消慢速或长时间运行的查询?

时间:2018-10-29 20:39:45

标签: graph-databases gremlin tinkerpop tinkerpop3 gremlin-server

大多数数据库为用户提供了一种机制,可以列出正在运行的查询并在需要时取消它们。这对于终止需要大量时间的查询特别有用。例如,在MySQL中,您将执行以下操作:

 Material  newvar2
  500      4.28

如何在gremlin服务器上执行类似的操作?到目前为止,唯一可用的旋钮是yaml配置中的mysql>show processlist; mysql> kill <pid>; ,可让您在超时时终止请求。我对可以列出所有正在运行的查询的API和可以让我按ID删除查询的API感兴趣。如果尚不支持该功能,tinkerpop是否计划在较新版本中提供支持?像这样:

scriptEvaluationTimeout

1 个答案:

答案 0 :(得分:5)

Gremlin Server中没有任何东西可以列出正在运行的查询。配置有更高详细级别的服务器日志可能会给您一些提示,但是我猜这并不是一个很好的解决方法。某些图形系统将具有向您提供该信息的本机功能-即“慢速查询日志”之类的功能,但TinkerPop不会向您提供这些信息。

对于取消,根据标准TinkerPop语义,Traversal应该遵守线程中断请求。这些语义由TinkerPop流程测试套件强制执行。也就是说,图提供者仍然需要适当地允许这种行为。 Gremlin服务器将尝试中断基于字节码或基于脚本的遍历,这些遍历超过服务器上scriptEvaluationTimeout的配置或针对每个请求提供的该值的替代。适当地设置这些超时,并使用尊重TinkerPop语义的提供程序进行取消,这是您逃避遍历的最佳防御方法。请注意,仅实现Gremlin Server协议(但可能不使用Gremlin Server本身)的图形提供程序可能具有不同的超时控制选项。

在当前版本的3.x中,我们绝对改进了TinkerPop 2.x的遍历消除功能-希望对于4.x,我们确实可以完美地做到这一点。