我在Neo4j中经历了一些非常糟糕的减速,现在已经花了几天时间解决这个问题,我仍然无法弄清楚原因。我真的希望有人可以提供帮助。我已经尝试过neo slack支持小组,但无济于事。
我的设置如下:后端是一个django应用程序,通过官方驱动程序(pip包neo4j-driver == 1.5.0)连接到dockerized Neo4j Enterprise 3.2.3实例。我们编写的数据是在大约15个并发合并的不频繁突发中添加到图的同一部分,并在用户与我们产品的某个部分交互时触发(每个交互导致单独的合并)。
每个合并操作都是以下查询:
MERGE (m :main:entity:person {user: $user, task: $task, type: $type,
text: $text})
ON CREATE SET m.source = $list, m.created = $timestamp, m.task_id=id(m)
ON MATCH SET m.source = CASE
WHEN $source IN m.source THEN m.source
ELSE m.source + $list
END SET m.modified = $timestamp
RETURN m.task_id AS task_id;
此查询的 PROFILE 类似于this。如您所见,单个处理时间在ms范围内。我们已经测试了这种100次以上的连续测试,没有任何问题。我们在this架构中配置了一个Node密钥。
然而,正在运行的系统似乎停滞不前,我们看到这些查询的执行时间高达2分钟!正在运行的查询的快照类似于this。
有没有人知道可能发生的事情?
进一步的系统信息:
ls data/databases/graph.db/*store.db* | du -ch | tail -1
249.6M total
find data/databases/graph.db/schema/index -regex '.*/native.*' | du -hc | tail -1
249.6M total
ps
1 root 297:51 /usr/lib/jvm/java-1.8-openjdk/jre/bin/java -cp /var/lib/neo4j/plugins:/var/lib/neo4j/conf:/var/lib/neo4j/lib/*:/var/lib/neo4j/plugins/* -server -Xms8G -Xmx8G -XX:+UseG1GC -XX:-OmitStackTraceInFastThrow -XX:+AlwaysPr
printenv | grep NEO
NEO4J_dbms_memory_pagecache_size=4G
NEO4J_dbms_memory_heap_maxSize=8G
该机器总内存为16GB,没有其他任何东西在运行。