我使用cypher编写了各种查询,每个查询不少于200毫秒。它们非常简单,因此我无法确定瓶颈所在。
与参数的简单匹配,2200ms:
与参数的简单明显匹配,200毫秒:
路径,2500毫秒:
起初我认为问题是缺乏资源,因为我在同一个盒子上运行neo4j和我的应用程序。虽然性能监视器表明CPU和内存基本上是免费的并且可用,但我将neo4j服务器移动到另一个本地机箱并观察到类似的延迟。两台服务器都是工作站,配备了相当新的Xeon处理器,12GB内存和用于数据存储的SSD。以上所有这些让我相信延迟不是由于我的硬件造成的。操作系统是Windows 7。
图表的节点少于200个,关系少于200个。
我已经附加了一些我发送给neo4j的查询以及服务器,数据库和JVM的配置。没有加载插件或扩展程序。
Pastebin Links:
答案 0 :(得分:4)
这是第一次运行还是后续运行这些查询?
您的节点上可能没有标签,也没有索引或唯一约束。
所以Neo4j必须扫描整个商店,让你的节点将所有内容拉入内存,加载属性并进行检查。
试试这个:
运行直到count返回0:
match (n) where not n:Entity set n:Entity return count(*);
添加约束
create constraint on (e:Entity) assert e.Id is unique;
再次运行您的查询:
match (n:Element {Id:{Id}}) return n
等
答案 1 :(得分:4)
[扩大我之前发表的评论。]
@TFerrell:您的评论声明“所有节点都有标签”,并且您尝试应用索引。但是,目前尚不清楚您是否在慢Cypher查询中实际指定了标签。我从你原来的问题陈述中注意到,你的两个较慢的查询实际上都没有指定一个节点标签(可能应该是“Project”)。
如果您的Cypher查询未指定节点的标签,则数据库引擎必须测试每个节点,并且它也无法应用索引。
因此,请尝试在慢速查询中指定正确的节点标签。
答案 2 :(得分:2)
当你在Windows上(堆上的内存映射)时,自动内存映射计算似乎有问题。
我只是查看了你的messages.log
并添加了一些数字,所以看起来mmio足以填满你的java堆空间(old-gen),没有空间存放数据库,缓存等。
请尝试通过将conf/neo4j.properties
中的mmio配置修改为更合理的值(比自动计算)来修改它。
对于您的小商店,只需取消注释以#neostore开头的值。 (即删除#)应该可以正常工作。
对于更大的图形(2M节点,10M rels,20M道具,10M长字符串),其他类似的东西(适合3GB堆):
neostore.nodestore.db.mapped_memory=25M
neostore.relationshipstore.db.mapped_memory=250M
neostore.propertystore.db.mapped_memory=250M
neostore.propertystore.db.strings.mapped_memory=250M
neostore.propertystore.db.arrays.mapped_memory=0M
以下是添加的数字:
auto mmio: 134217728 + 134217728 + 536870912 + 536870912 + 1073741824 = 2.3GB
stores sizes: 1073920 + 1073664 + 3221698 + 3221460 + 1073786 = 9MB
JVM max: 3.11 RAM : 13.98 SWAP: 27.97 GB
max heaps: Eden: 1.16, oldgen: 2.33
取自:
neostore.propertystore.db.strings] brickCount=8 brickSize=134144b mappedMem=134217728b (storeSize=1073920b)
neostore.propertystore.db.arrays] brickCount=8 brickSize=134144b mappedMem=134217728b (storeSize=1073664b)
neostore.propertystore.db] brickCount=6 brickSize=536854b mappedMem=536870912b (storeSize=3221698b)
neostore.relationshipstore.db] brickCount=6 brickSize=536844b mappedMem=536870912b (storeSize=3221460b)
neostore.nodestore.db] brickCount=1 brickSize=1073730b mappedMem=1073741824b (storeSize=1073786b)