针对长时间运行查询的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。。。