【问题标题】:Neo4j query execution time: when executing the same query multiple times, only the first one seems to be correctNeo4j 查询执行时间:多次执行同一个查询时,似乎只有第一个是正确的
【发布时间】:2020-06-26 01:22:15
【问题描述】:

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

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

【问题讨论】:

    标签: neo4j cypher benchmarking execution-time


    【解决方案1】:

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

    你需要更改的具体设置是

    dbms.memory.pagecache.size=1M 
    

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

    :系统信息

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

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

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

    【讨论】:

    • 我试过这个,更改设置并重新启动数据库。但是除了第一次之外,我仍然得到result_available_after = 1ms 多次执行相同的查询。
    猜你喜欢
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多