写点什么

Neo4j 执行计划

发布于: 2020 年 05 月 22 日
Neo4j执行计划

neo4j 中使用 Cyper 来进行查询, cyper 执行过程中会将查询语句解析成执行计划树, 选取最优的执行计划, 然后执行, 生成执行计划中, 有两个东西需要特别注意.

评估模型

评估模型用来估算最优执行计划, 从而选取最优执行计划, 执行计划可以使用 profile 或者 explain 关键字来进行查看, 执行计划开始于叶子节点, 叶子节点没有 input, 一般包括操作符 scan/seek, 操作符直接从存储引擎直接获取数据, 因此会有 database hit(下文简称为 dh), 叶子节点产生的结果按序流转到父, 一直到 root 节点, 然后产生出最后的结果.

立即评估/延迟评估

一般来说, 查询评估模型是延迟执行的; 由于父子节点间是通过管道传输的, 所有子节点的结果一到父节点, 父节点就会执行, 因此子节点不需要完全执行完毕, 父节点才开始执行; 然而一些操作符例如聚合/排序等操作, 需要所有子节点全部执行完成后输出至父, 父节点操作符才能开始进行执行, 这类操作 neo4j 中成为 eager 操作.

执行计划涉及指标概念

Rows: 操作符产生的行数, 执行 profile 操作可用, explain 操作不会触发 rows;

EstimatedRows: 估算操作符产生的行数, 基于 neo4j 中可用的统计信息预估一个操作符执行的近似数, cyper 编译器使用这个预估值选择合适的执行计划;

DbHits: 每个操作符会请求存储引擎来检索或者更新数据. 对于存储引擎来说, DBhits 是个抽象概念, 触发 Dbhit 操作的操作符见附表;

time: 当使用 pipelined 运行时, 一些操作符会显示, 数值显示执行给定操作符的 ms;

Page Cache

这是一个在 neo4j 企业版中才会提供的功能, 主要作用就是加快检索速度, 复合 cache 的定位, page cache 提供的一些统计值, pc hits 缓存命中数, pc misses 缓存未命中数, pc hits ratio 命中率, page cache 被用来缓存数据避免访问磁盘, hits 值高, miss 值低, 可以让查询运行更快;


附录

每个执行计划的操作符的详细说明官网.










发布于: 2020 年 05 月 22 日阅读数: 81
用户头像

还未添加个人签名 2020.02.06 加入

还未添加个人简介

评论

发布
暂无评论
Neo4j执行计划