Neo4j查询执行时间:多次执行同一查询时,似乎只有第一个是正确的

问题描述 投票:0回答:1

我正在使用LDBC数据集来测试Neo4j 4.0.1中的执行时间,SF = 1,并且我使用Java连接Neo4j,ResultSummary.resultAvailableAfter()来获取执行时间,这是获取结果的时间,并且开始流式传输。但是对于同一查询,当我第一次运行时,执行时间似乎很合理,就像几百毫秒一样,但是当我继续运行该查询时,执行时间几乎变为0。我想这是查询缓存的作用,但是有没有适当的方法来测试查询执行时间并获得合理的结果?

现在,我只能重新启动db才能获得似乎正确的结果。我猜这是因为Neo4j直接缓存查询结果,并且如果多次执行相同的查询,只会获取查询结果。有什么办法可以避免这种情况?即让neo4j进行常规缓存(例如节点和关系),而不是直接缓存查询结果。谢谢!

neo4j cypher benchmarking execution-time
1个回答
0
投票

页缓存最有可能负责您所看到的结果(好吧,当我在构建Neo4j集群时,我与neo4j工程师进行了一些讨论。他们优化集群性能的建议似乎表明了这一点。)您应该将页面缓存大小设置为0或非常接近0(例如1Meg或较低)。您可以在此处https://neo4j.com/docs/operations-manual/current/performance/memory-configuration/中阅读有关内存设置的信息>

您需要更改的特定设置是

dbms.memory.pagecache.size=1M 

或将其设置为0。将其明确设置为一个值。不要对此设置发表评论。 neo4j可以将默认内存大小分配给页面缓存。设置更改后,重新启动服务器/群集,然后查看所提供的性能数字。您还应该通过运行

检查缓存的外观

:sysinfo

运行查询前后在浏览器中的命令。

并且没有直接的设置来告诉neo4j缓存什么。那是正确的,由服务器本身决定。

对不起,我没有足够的声誉分,无法对您的问题发表评论!

© www.soinside.com 2019 - 2024. All rights reserved.