Neo4j缓慢并发合并

时间:2018-03-29 08:04:14

标签: neo4j

我在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,没有其他任何东西在运行。

0 个答案:

没有答案