升级到2.1.3后,Neo4j Cypher查询确实很慢

时间:2014-08-11 16:47:44

标签: performance neo4j upgrade cypher

今天上午,经过一些努力(参见:Upgrading a neo4j database from 2.0.1 to 2.1.3 fails),我将我的数据库从2.0.1升级到2.1.3。我升级的主要目标是获得某些查询的效果(请参阅:Cypher SORT performance)。

一切似乎都在起作用,除了所有Cypher查询 - 无一例外 - 变得越来越慢。过去需要75毫秒的查询现在需要近2000毫秒。

由于我在Azure上使用A1(1xCPU~2GB RAM)虚拟机运行,我认为给neo4j更多ram和额外的核心会有所帮助,但升级到A2 VM之后我会得到或多或少相同的结果

我不知道,通过备份和升级/使用该数据库,我是否放松了索引?我的数据库中可能有50K节点,所以它并不那么壮观,对吧?

我现在仍在运行A2 VM(2xCPU,~4GB RAM),但不得不再次降级到2.0.1。


更新:#1 2014-08-12

在阅读Michael的第一条评论后,关于如何使用shell检查我的索引,我做了以下事情:

  • 运行我的2.0.1数据库服务(并且运行良好),我执行了Neo4jShell.bat然后执行了Schema命令。这产生了以下响应:enter image description here
  • 我使用Neo4jInstall.bat remove命令卸载了2.0.1服务。
  • 我使用Neo4jInstall install命令安装了2.1.3服务。
  • 运行我的2.1.3数据库服务后,我再次执行Neo4jShell.bat,然后执行schema命令。这产生了以下响应:enter image description here

我认为可以安全地得出结论,迁移过程(在2.1.3中)备份过程(在2.0.1中)已经从我的数据库中删除了索引。这解释了为什么我备份的数据库比在线数据库(~380MB)小得多(~110MB)。迁移到2.1.3后,我的数据库变得更小(~90MB)。

现在的问题是,它只是重建我的索引并完成它吗?


更新:#2 2014-08-12

我想我已经回答了我自己的问题。在重新创建约束和索引之后,我的查询就像以前一样执行(有些甚至更快,如预期的那样)。

1 个答案:

答案 0 :(得分:3)

最后,事实证明,在备份我的数据库(在2.0.1版本中)或在启动时的迁移过程中(在2.1.3版本中),我丢失了索引和约束。显而易见的解决方案是手动重新创建它们(http://docs.neo4j.org/chunked/stable/cypher-schema.html)并继续前进。