【问题标题】:neo4j docker image seems to go to sleepneo4j docker 镜像似乎进入休眠状态
【发布时间】:2018-06-08 16:58:22
【问题描述】:

https://github.com/graphaware/neo4j-php-client 结合使用 neo4j docker 映像和 graphaware 的 php 客户端时,查询性能似乎存在问题,我什至不确定这是否是正常/预期行为。

设置:

问题是30分钟不查询api后,第一次查询耗时很长,超时5秒(在graphaware客户端配置)。看来neo4j 需要唤醒/热身。之后,查询非常快(约 100 毫秒)。现在即使在生产中,也没有足够的调用让 neo4j 一直处于唤醒状态。查询通常相当复杂。

这是正常行为吗?如果是,是否有解决此问题的常用策略,而不是定期调用 api?

【问题讨论】:

    标签: docker neo4j cypher


    【解决方案1】:

    是的,这对于 Neo4j 来说是正常的。 Neo4j 缓存最近接触过的节点/边缘,使经常接触的节点查询起来更便宜。它会在一段时间后清除该缓存以节省内存。

    这里是关于如何“加热”缓存以防止出现问题的 Neo4j 文档,但是如果您有一个非常冷的服务器(即不频繁的查询),您需要在执行密集查询之前对其进行预热,或者您将永远承受冷启动成本。

    https://neo4j.com/developer/kb/warm-the-cache-to-improve-performance-from-cold-start/

    【讨论】:

    • 非常感谢。根据您链接 apoc.warmup.run 帮助的文章,但我们已经让它每 5 分钟运行一次,但没有得到想要的结果。还有其他的吗?
    • 您的图表有多大,您的查询是什么样的? Apoc 将尝试一次加载一个页面,并且它不会加载属性。因此,如果您在查询中使用大量属性,Apoc 将无济于事,除非您将“loadProperties”数组与您想要加载的属性一起传递(警告:我从未真正传递过属性,所以我我不确定这会对您的磁盘负载产生什么影响)。您还可以创建一个自定义“预热”查询,该查询会针对您特别关心的节点和属性。
    • 我复制了一个非常小的图表,
    • 好的,有了这么大的图表,apoc.warmup.run(true) 应该只用几页就可以找到您要查找的内容。它/可能/是您正在运行的实例数量的问题(假设运行 50 个实例可能意味着每个实例的内存/页面非常少)。可能发生的事情(我们现在处于推测状态)是 apoc.warmup.run 正在用来自后面页面的信息覆盖早期的缓存信息,导致您的查询没有被完全索引。您可以尝试增加“dbms.memory.pagecache.size”,看看这是否对您的问题有帮助,因为这将允许更多缓存。
    • 测试中。有没有可能明确地说缓存是否存在?通过“等待,然后再次查询”进行测试非常不稳定
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    相关资源
    最近更新 更多