Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
针对长时间运行查询的Neo4j查询监视/分析_Neo4j_Monitoring - Fatal编程技术网

针对长时间运行查询的Neo4j查询监视/分析

针对长时间运行查询的Neo4j查询监视/分析,neo4j,monitoring,Neo4j,Monitoring,我有一些很长时间的疑问。正如背景信息:我正在为特定元路径的所有实例爬网我的图形。例如,计算在图中找到的特定甲烷路径的所有实例 匹配(a:Content)-[:isTaggedWith]->(t:Term)测量查询性能 要回答第一个问题,有两个主要选项用于度量查询的性能。第一种是使用配置文件;将它放在查询前面(如PROFILE MATCH(a:Content)-[:IsTaggedWith]->(t:Term)…),它将执行查询并显示所使用的执行计划,包括本机API调用、每个操作的结果数、数据库总

我有一些很长时间的疑问。正如背景信息:我正在为特定元路径的所有实例爬网我的图形。例如,计算在图中找到的特定甲烷路径的所有实例


匹配(a:Content)-[:isTaggedWith]->(t:Term)测量查询性能

要回答第一个问题,有两个主要选项用于度量查询的性能。第一种是使用
配置文件
;将它放在查询前面(如
PROFILE MATCH(a:Content)-[:IsTaggedWith]->(t:Term)…
),它将执行查询并显示所使用的执行计划,包括本机API调用、每个操作的结果数、数据库总命中数和总执行时间

缺点是,
PROFILE
将执行查询,因此,如果是写入数据库的操作,更改将被持久化。要在不实际执行查询的情况下分析查询,可以使用
EXPLAIN
而不是
profile
。这将显示用于执行查询的查询计划和本机操作,以及估计的数据库总命中率,但它不会实际运行查询,因此它只是一个估计值

检查长时间运行的查询(仅限企业)

可以在Enterprise Edition中使用Cypher完成对运行查询的检查:
CALL dbms.listQueries。您必须以管理员用户身份登录才能执行查询。如果要停止长时间运行的查询,请使用
调用dbms.killQuery()
并传入要终止的查询的ID

请注意,除了手动终止查询并根据配置的查询超时对其进行超时之外,除非您设置了其他方法来终止长时间运行的查询,否则通常不会在后端终止查询;但是,使用上述方法,您可以再次检查您的假设,即查询确实在发送后执行


这些仅在企业版中可用;我不知道如何在社区中使用这些函数或复制它们的行为。

为了测量长时间运行的查询,我想出了以下方法:

  • 使用tmux()终端会话,这非常简单。在此,您可以执行查询并关闭终端。稍后您可以返回会话

    • 新会话:
      tmux New-s*sessionName*
    • 从当前会话中分离(会话内):
      tmux Detach
    • 列出会话:
      tmuxls
    • 重新连接到会话:
      tmux a-t*sessionName*
  • 在tmux会话中,通过cypher shell执行查询。可以直接在shell中执行,也可以通过管道将命令导入shell中。梯形图方法更可取,因为您可以使用unix命令时间实际测量运行时,如下所示:

    time cat query.cypher | cypher shell-u neo4j-p n>result.txt

  • 文件query.cypher只包含常规查询,包括在末尾终止分号。查询结果将通过管道传输到result.txt中,执行的运行时将显示在终端中


    此外,可以按照@rebecca的正确说明,仅在企业版中列出运行的查询。

    查询在后端被终止的原因是什么?就我个人而言,我正在使用Bolt驱动程序从Java进程执行查询,测量查询时间与记录查询的开始和结束时间一样简单。非常感谢您提供的详细答案。但是我的假设正确吗?listQueries()和killQuery()命令仅在企业版中可用?对于noob问题,我感到抱歉:)但是我实际上从哪里调用列表Qeuries命令等。我尝试通过neo web浏览器以及neo4j webadmin中的控制台来实现这一点。调用命令无法识别。@Janukowitch您是正确的,这些命令仅在enterprise中可用。我更新了我的答案以反映这一点。假设它们是可用的,你可以在任何地方使用它们,你可以把密码;在web界面上,通过bolt,通过rest API。。。