首页 > 解决方案 > Neo4j 查询执行时间:多次执行同一个查询时,似乎只有第一个是正确的

问题描述

我在 Neo4j 4.0.1 中使用 LDBC 数据集测试执行时间,SF = 1,我使用 java 连接 Neo4j,ResultSummary.resultAvailableAfter() 获取执行时间,也就是获取结果并开始流式传输的时间. 但是对于同一个查询,当我第一次运行时,执行时间似乎是合理的,像几百毫秒,但是当我继续运行同一个查询时,执行时间几乎变成了0。我猜是查询缓存的效果,但是是否有任何适当的方法来测试查询执行时间并获得合理的结果?

现在我只能重新启动 db 以获得似乎正确的结果。我猜这是因为 Neo4j 直接缓存了查询结果,如果同一个查询被多次执行,它只会获取它。有没有办法避免这种情况?即让neo4j做正常的缓存(比如节点和关系),而不是直接缓存查询结果。谢谢!

标签: neo4jcypherbenchmarkingexecution-time

解决方案


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

您需要更改的具体设置是

dbms.memory.pagecache.size=1M 

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

:系统信息

在运行查询之前和之后在浏览器中执行命令。

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

抱歉,我没有足够的声望点来对您的问题发表评论!


推荐阅读