neo4j的进阶使用

Neo4j索引
CREATE INDEX 创建索引 
DROP INDEX 删除索引

CREATE INDEX ON :LABEL_NAME(property)
DROP INDEX ON :LABEL_NAME(property)
  • :schema

查看索引是否创建成功,一定要显示ONLINE才会生效

  • explain

如果只想查看查询计划,而不想运行该语句,可以在查询语句中加入EXPLAIN。此时,该语句将返回空结果,对数据库不会做出任何改变。

explain MATCH p=(a:company{name:'小明' }) RETURN p
  • PROFILE

如果想运行查询语句并查看哪个运算符占了大部分的工作,可以使用PROFILE。此时,该语句将被运行,并跟踪传递了多少行数据给每个运算符,以及每个运算符与存储层交互了多少以获取必要的数据。注意,加入PROFILE的查询语句将占用更多的资源,所以除非真正在做性能分析,否则不要使用PROFILE。

PROFILE MATCH p=(a:company{name:'小明' }) RETURN p

阅读执行计划时要记住的第一件事是,需要自下而上地阅读。

执行计划

执行查询的任务被分解为操作符,每个操作符执行一个特定的工作。这些运算符组合成一个树状结构,称为执行计划。执行计划中的每个操作符都表示为树中的一个节点。每个运算符将零或更多行作为输入,并产生零或更多行作为输出。这意味着一个操作员的输出成为下一个操作员的输入。连接树中两个分支的运算符组合来自两个传入流的输入并产生单个输出。

评价模型

执行计划的评估从树的叶节点开始。叶节点没有输入行,通常包括诸如扫描和查找之类的操作符。这些算子直接从存储引擎获取数据,从而导致[数据库命中。叶节点产生的任何行然后都通过管道传输到它们的父节点,而父节点又将它们的输出行通过管道传输到它们的父节点,依此类推,一直到根节点。根节点产生查询的最终结果。

急切和懒惰的评价

通常,查询评估是惰性的:大多数操作符一生成就将它们的输出行通过管道传递给它们的父操作符。这意味着在父运算符开始使用子运算符生成的输入行之前,子运算符可能不会完全耗尽。

但是,某些运算符(例如用于聚合和排序的运算符)需要聚合所有行才能产生输出。在将任何行作为输入发送到其父级之前,此类运算符需要完整执行。这些操作符称为急切操作符,在执行计划操作符一目了然中被这样表示。急切会导致内存使用率过高,因此可能是查询性能问题的原因。

统计数据

每个运算符都带有统计信息注释。

  • Rows

运算符生成的行数。这仅在查询已分析时可用。

  • EstimatedRows

这是预计由操作员生成的估计行数。该估计值是基于可用统计信息的近似数字。编译器使用这个估计来选择合适的执行计划。

  • DbHits

每个算子都会要求 Neo4j 存储引擎做一些工作,比如检索或更新数据。一个数据库命中是这个存储引擎工作的一个抽象的单位。触发数据库命中的操作列在数据库命中 (DbHits) 中。

  • Page Cache Hits, Page Cache Misses,Page Cache Hit Ratio

这些指标仅在使用 Neo4j 企业版时针对某些查询显示。页面缓存用于缓存数据并避免访问磁盘,因此具有高数量hits和低数量misses通常会使查询运行得更快。每当将多个运算符融合在一起以提高执行效率时,我们就无法再将此指标与给定的运算符相关联,然后此处将不会出现任何内容。

  • Time

Time仅在使用pipelined运行时时为某些运算符显示。显示的数字是执行给定运算符所花费的时间(以毫秒为单位)。每当几个运算符融合在一起以提高执行效率时,我们就不能再将持续时间与给定的运算符相关联,然后这里就不会出现任何内容。

数据预热
MATCH(n) 
OPTIONAL MATCH (n)-[r]-() 
RETURN count(n.value)+count(r)
优化内存配置

在neo4j中有两个内存配置项,直接决定了neo4j的性能。在neo4j中最重要的内存的配置有两项:

  • 堆内存(Heap size)

堆内存是neo4j运行时需要的内存,用于:查询执行、事务状态、图形管理等

堆的大小决定于neo4j的使用性质。配置堆内存的参数如下:

# 默认是512m
dbms.memory.heap.initial_size=16384m
dbms.memory.heap.max_size=16384m

说明:官方建议堆内存不要过大,过大容易产生full gc,导致程序停顿。在总物理内存足够的情况下(>56G),官方的建议值是:16G。

  • 页缓存(pagecache)
    # 默认是10g
    dbms.memory.pagecache.size=80g

在neo4j中,"页面缓存”用来缓存索引和数据。通过该参数的设置,可以把数据都加载到内存中。该参数的大小需要根据数据量和索引量,以及物理内存的大小来设置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值