【问题标题】:How to compare performance on neo4j queries without cache?如何比较没有缓存的 neo4j 查询的性能?
【发布时间】:2015-07-23 06:32:59
【问题描述】:

我一直在尝试比较 neo4j 中的查询性能。

为了提高查询效率,我添加了索引,使用配置文件分析结果,并尝试在使用 USING INDEX 时执行相同操作。

在大多数查询中,使用第二个选项(使用 USING INDEX)时 DB Hits 要好得多,行数相同或更少,但时间性能似乎不可靠:在添加 USING INDEX 的多个查询中,虽然速度较慢通过重新执行查询,更好的性能参数(db hits & rows)和时间变得更好。

为了阻止缓存的干扰,转到属性文件,将 neo4j.properties 中的 cache_type 更改为 none 并重新启动 neo,但似乎每次相同查询的结果都更快(直到某点)。

最好的测试方法是什么?

【问题讨论】:

    标签: performance caching indexing neo4j


    【解决方案1】:

    Neo4j 有(最高 2.2.x)two layered cache architecture。使用cache_type=node,您只需切换对象缓存。要禁用页面缓存,您可以使用dbms.pagecache.memory=0。但是,如果所有缓存都被禁用,您基本上可以测量 IO 子系统的速度,因为每个查询都会下降到裸机并从磁盘读取。

    我推荐一种不同的方法:启用两个缓存并多次运行要比较的查询来预热缓存。对预热的缓存进行测量,因为这更接近真实的生产场景。

    附带说明:在 Neo4j 2.3 中,对象缓存将消失,我们只有页面缓存。

    【讨论】:

    • 嗨斯特凡,感谢您的回答!尝试按照您的建议进行操作,将 cache_type 从 none 更改为 soft。在这两种情况下(使用&不使用 USING INDEX 提示),查询起初似乎运行得越来越快,但过了一段时间它们开始变慢。据我从文档中了解到,数据库点击次数较少的查询应该更快,但由于时间不一致,如何对其进行测试?我是否应该选择 db hits 较少的那个(带有 USING INDEX 提示的那个),尽管它并不总是更快?
    • 看起来从 3.5 开始,页面缓存大小属性已更改为 dbms.memory.pagecache.size:neo4j.com/docs/operations-manual/current/reference/…
    猜你喜欢
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    相关资源
    最近更新 更多