并发查询neo4j时,neo4j报错,debug.log报错
发布于 3 个月前 作者 daydayup 341 次浏览 来自 问答

十个并发,查询neo4j,每个cypher平均查询时间3s左右 持续几分钟查询后,neo4j持续报相同的错: 微信图片_20180920155402.png

23 回复

其实最近一直发现neo4j抗不了并发,10个并发,被测试组都笑了,这都扛不住。所以也很懊恼,查询稍微复杂点的(返回时间秒级),稍微密集访问时,库就会崩掉,一直也没找到好的解决方式。

你用的什么方式访问?

@bingo 通过driver方式连接neo4j 访问的

你的系统配置怎么样?把neo4j.conf、Cypher查询、driver类型和版本发上来看看?

@graphway 系统配置: 16核,128内存

neo4j配置: 主要配置如下 dbms.memory.heap.initial_size=16g dbms.memory.heap.max_size=16g dbms.memory.pagecache.size=100g dbms.threads.worker_count= 400 dbms.security.procedures.unrestricted=apoc.*

cypher查询语句

MATCH p=(a:P{uid:‘111’})-[:关系1]->(b:E)<-[:关系1]-(c:P) WITH a, c, b, collect§ as pList limit 100 UNWIND pList as p2 WITH a, c, count(distinct b) as cnt,collect(p2) as paths WHERE cnt>1 WITH paths UNWIND paths as path WITH reduce(pathIdentity=’’, singleRelation in rels(path) | pathIdentity + startNode(singleRelation).uid+ ‘&&’+endNode(singleRelation).uid+’_’) AS pathIdentity, collect(path) as newPaths RETURN newPaths, pathIdentity UNION ALL MATCH path=(a:P{uid:‘0013c9c39005eee90296c4cb2851a781’})-[:关系1]->(b:E) WITH a, b, path limit 50 WITH a.uid+’&&’+b.uid AS pathIdentity, collect(path) as newPaths RETURN newPaths, pathIdentity;

driver版本:neo4j-java-driver-1.4.0

一般都是毫秒级,到秒的话。你profile一下你的执行计划,贴出来看看

我的意思是通过 http 还是通过bolt。我记得bolt是有连接池的设置的。性能上可以测试一下是不是更好。

我们线上用c3p0一般没啥问题啊,是不是查询的问题explain一下

@bingo 通过bolt连接的,连接池设置的是400,但是效果看起来没有提升 profile 主要是第一句 MATCH p=(a:P{uid:‘111’})-[:关系1]->(b:E)<-[:关系1]-(c:P) 这句展开的多点, 后面都是在 聚合,过滤

@crazyyanchao 老哥,C3P0是什么? 你们的查询一般多久? 并发一般能到多少个每秒? 对比下,确认是不是我们做的有问题

@daydayup 就是用连接池啊,我们的一般查询都在几毫秒、几十毫秒,复杂点的比如用了很多union all,查询在6s左右。但这是一个比较特殊的场景我们是查询选中的所有节点的两两关系,这个查询慢应该是无法避免的! 选中点越多查询越慢~

你单个语句执行在后台都要几秒钟?在cypher-shell中执行?

@crazyyanchao 明白你的意思,对于单个查询在百毫秒以内的,这个并发我们这边也是能撑住的。 但是,我遇到的问题是,类似你说的单个查询6s这样的请求, 这样的请求,每秒并发10个,持续几分钟,库就得挂了 老哥,你可以试一下

@bingo 单个查询,平均在3秒左右,长点的能达到10s左右

并发测试每秒调用1000次,没有问题,数据库正常。估计不是你的查询就是接口有问题,我以前遇到过因为查询而导致死锁的问题,大量UNION ALL写入数据库! TIM截图20180925191451.pngTIM截图20180925191515.png

你是不是有什么任务在后台用类似的方法大量写入?

@crazyyanchao 老哥,你的这个接口,单次调用查询时间多久啊?

@crazyyanchao 重读轻写的,大部分时间基本没有写数据的

@daydayup 那应该和DRIVER有影响吧,你再找找吧

@crazyyanchao 老哥加个qq交流下 375406102

@crazyyanchao 你现在用的什么版本的driver?

@daydayup

    <dependency>
        <groupId>org.neo4j</groupId>
        <artifactId>neo4j-jdbc-driver</artifactId>
        <version>3.3.1</version>
    </dependency>
	
这个版本有个BUG,因该最近要修复了!

TIM截图20180925194708.png

回到顶部