现象:
neo4j相同查询语句一次查询特慢再次查询比较快。
分析:
查询语句
//查询同名方法match(path:Method)
where id(path) in [244333030] and NOT path:Constructor//是rpc的方法match(rpc_method:Method)<-[:DECLARES]-(rpc_method_cls:Class)
-[:ANNOTATED_BY]->(anno:Annotation)
-[:OF_TYPE]->(annoType:Type{fqn:'com.yueyue.wukong.rpc.annotation.RpcProvider'})where rpc_method.signature = path.signaturereturn * limit 10
profile查看真实的执行过程。explain 可以查看预估的计划任务
profile match(path:Method)
where id(path) in [244333030] and NOT path:Constructor//是rpc的方法match(rpc_method:Method)<-[:DECLARES]-(rpc_method_cls:Class)
-[:ANNOTATED_BY]->(anno:Annotation)
-[:OF_TYPE]->(annoType:Type{fqn:'com.yueyue.wukong.rpc.annotation.RpcProvider'})where rpc_method.signature = path.signaturereturn * limit 10
过滤行数最多才16行,理论不应该慢。
升级配置,修改neo4j内存配置
分析服务器监控, cpu 磁盘压力比较高。
尝试升级服务器配置到64G
修改neo4j 内存配置
dbms.memory.heap.initial_size=2G
dbms.memory.heap.max_size=10G
dbms.memory.pagecache.size=30g 原来是2G
最终解决问题。
neo4j 内存大小评估方法参考文档:
https://neo4j.com/developer/kb/how-to-estimate-initial-memory-configuration/