如何列出 运行 gremlin 查询?如何取消慢速或长 运行 查询?

How do I list running gremlin queries? How can I cancel slow or long running queries?

大多数数据库都提供了一种机制,供用户列出 运行 查询并在需要时取消它们。这在终止需要大量时间的查询时特别有用。例如,在 MySQL 你会做这样的事情:

mysql>show processlist;
mysql> kill <pid>;

如何在 gremlin 服务器上做类似的事情?到目前为止,唯一可用的旋钮是 yaml 配置中的 scriptEvaluationTimeout,它允许您在超时时终止请求。我对可以列出所有 运行 查询的 API 和可以让我按 ID 删除查询的 API 感兴趣。如果还不支持,tinkerpop 是否计划在新版本中支持它?类似于:

g.query()
g.query('123')
g.query('123').cancel()

Gremlin 服务器中没有任何内容会列出 运行ning 查询。配置了更高详细级别的服务器日志可能会给你一些提示,但我想这并不是一个很好的解决方法。某些图形系统将具有为您提供该信息的本机功能 - 即 "a slow query log" 类功能,但 TinkerPop 不会向您公开这些信息。

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

我们在 3.x 的当前版本中确实改进了 TinkerPop 2.x 的遍历取消 - 希望 4.x 我们可以真正完美地解决它。