51CTO首页
AI.x社区
博客
学堂
精品班
软考社区
免费课
企业培训
鸿蒙开发者社区
WOT技术大会
IT证书
公众号矩阵
移动端

EverDB之分布式执行计划

开发 前端 分布式
我们通过“EXPLAIN + SQL”指令可以详细地查看其执行计划,找到性能瓶颈,为我们优化SQL提供方向和依据。本文将从EverDB分布式数据库角度阐述执行计划。

本文转载自微信公众号「匠心独运维妙维效」,作者EverDB研发组。转载本文请联系匠心独运维妙维效公众号。

在数据库系统设计中,执行计划是对SQL执行流程的形式化描述,包括了SQL执行需要的所有算子以及其执行次序。我们通过“EXPLAIN + SQL”指令可以详细地查看其执行计划,找到性能瓶颈,为我们优化SQL提供方向和依据。本文将从EverDB分布式数据库角度阐述执行计划。

(一)分布式架构执行计划

相比于集中式数据库,分布式数据库拥有大量分片节点,分别负责各自分片的数据计算与存储,那么其执行计划就需要特殊的实现方式。对于中间件架构分布式数据库,通过引入分布式算子(即下文EverDB执行计划节点)实现数据分片存储功能,执行计划解析优化,下发数据分片内部独立计算,协调数据分片之间并发执行,执行结果由中间件进行进一步整合进行分组、排序等操作,是一种高效便捷的实现方式。

EverDB正是基于这种设计思路实现的执行计划。与传统集中式数据库相比,EverDB执行计划使数据库有更高的扩展性,支持更大量级的数据规模,更高并发的数据访问。在处理相同负载压力的前提下,可以充分利用各分片的存储与计算资源,以及并行计算的优势达到更好的性能。

(二)EverDB执行计划

EverDB分布式数据库由Grid调度层、数据节点、配置节点、管理台组成。Grid调度层作为分布式数据库的调度节点,接收并解析SQL,将SQL语句重构改造,支持涉及分片表和非分片表两种类型的执行计划分析。

图1

EverDB的执行计划包括SQL在Grid调度层和后端数据节点的执行流程。Grid调度节点的执行计划,主要涉及逻辑处理层和连接驱动层两个部分,其中逻辑处理层包括词法、语法解析模块,客户端通信模块,普通表/分片表配置、SQL重构改造、执行计划树及计划树节点。其中普通表/分片表配置用于识别SQL是否需要分片处理,并获取分片表的存储地址信息,完成基于分片策略的执行计划构建。连接驱动层是内部连接池和通信协议的处理模块,完美支持MySQL通信协议,负责在执行计划中将请求下推给数据节点。数据节点执行计划的实现方式可以参照MySQL执行计划。

图2

以分片查询为例,EverDB的Grid调度节点的执行计划流程:

  • SQL解析:客户端处理线程接收到从客户端发来的查询请求,对SQL进行词法语法解析。
  • SQL重构:根据SELECT查询表的存储信息,可分为普通表和分片表,如果是分片表,需要进一步根据查询条件和数据存储情况,重构优化SQL语句。比如,多分片间的跨节点查询,可通过SQL重构后下推数据节点执行,或者通过建立临时表,迁移小部分数据来降低查询性能损耗。
  • 构建执行计划:SQL经过解析,需要构建对应的执行计划树,即用于维护SQL执行计划的数据结构,由多个执行计划节点构成。执行计划节点是SQL执行过程中每一步操作的执行者,也可以看作一个个线程的执行体,它分为很多类型,用于执行不同的操作,比如内部执行节点、事务执行计划节点、数据迁移执行节点、信息查询节点、信息发送节点、组合排序去重节点等。
  • 运行执行计划:执行计划运行过程中,对于分片表查询,采用多线程并发的方式,加快分布式集群的处理速度。
  • SQL下推:为将查询请求下推至对应的分片数据节点,EverDB通过通信模块(即图3中的MySQL协议适配、驱动模块)将查询请求以MySQL通信协议的格式封装成数据包,再由连接池分配的连接将数据包发送给数据节点,以完成分片查询请求的下推。
  • 整合结果:数据节点接收到来自调度节点的请求,进行进一步的SQL解析,形成针对表的执行计划。查询计算完成后,数据节点将查询结果反馈至调度节点,由调度节点继续按执行计划树,对所有数据节点返回的分片结果进行归并、排序等操作,将完整的查询结果返回给客户端,完成查询请求。

图3

调度节点在生成执行计划树时,会根据分片规则对语句进行并行执行改造,将重构后的多条SQL由对应的执行计划树叶节点下推至目标实例,由数据节点实例完成该分片的查询执行计划分析。

图4介绍了执行计划叶节点将查询请求下推至数据节点的通讯流程。COM_QUERY是封装了查询语句的协议包,由执行计划树叶节点发送至对应的数据节点进行查询计算。执行计划叶节点以MySQL协议流程接收、解析结果集。图示中结果集返回的协议包及次序为:

  • ResultSetHead:结果集头包,包含列个数信息;
  • Field:结果集字段包,包含每一字段具体的信息,结果集每一字段对应一个Field协议包;
  • 所有字段信息发送结束后,后端数据节点发送一个 EOF 协议包,开始行数据的发送;
  • RowData:结果集行数据包,与Field协议包相同,每一行的数据对应一个行数据包,因此,一次结果集发送可能会包含多个行数据协议包;
  • 所有行数据包发送完毕后,服务端会再发送 EOF 协议包表示结果集发送的结束;

执行计划叶节点收到分片的查询结果后,将各自分片结果交由父级非叶节点对所有分片结果做进一步处理(如归并、排序等),向客户端返回完整的查询数据结果。

图4

(三) 如何查看执行计划?

展示执行计划,只需在查询的SELECT关键字之前增加DBSCALE EXPLAIN。具体语法如下:

DBSCALE EXPLAIN + SELECT查询语句;

结果包含执行计划每一步的执行信息,显示执行节点、执行次序和执行SQL内容,SQL性能好坏也能通过执行计划看出来。用于分析SQL语句和表结构的性能瓶颈。

图5

如上图(图5)示例,执行计划返回结果分为上下两个结果集。第一部分展示的是查询请求从中间层Grid到数据节点的完整执行计划。结果集前两列是SQL在中间层Grid的执行计划,即exec_node字段展示SQL的执行计划树,data_source展示的是每一个分片执行节点涉及的分片数据源。结果集其他字段则展示的是每一条分片查询在各自数据节点上的执行计划,这块与MySQLexplain的返回结果是相同的。第二部分展示的是执行计划在每个执行节点上实际运行的重构后SQL语句,因此可能与从客户端接收到的SQL语句不同。

  • 执行计划中一些重要字段的说明如下:
  • exec_node:执行计划树的每一个执行节点。整列展示了完整的执行计划树,以“*”开头表示执行计划树根节点,“-”开头表示执行计划树子节点,其中短横线越长表示节点层数越深。如上文示例包含*MySQLSendNodeid首字母为*号,是此例分片查询执行计划树的根节点。--MySQLFetchNode以“--”开头,是执行计划树的子节点,多个FetchNode并发查询对应数据节点的数据分片,再由SendNode整合多个FetchNode的查询结果。
  • data_source:数据源信息。数据源是提供数据库连接用来具体执行客户端请求的数据库实例,即MySQLFetchNode执行查询的实例地址。
  • id:查询中执行select子句或操作表的顺序,id相同,执行顺序由上至下;id不同,id值越大优先级越高,越先被执行。

select_type:查询数据的操作类型,如下表:

SIMPLE

查询中不包含子查询或者UNION

PRIMARY

查询中若包含任何复杂的子部分,最外层查询标记为PRIMARY

SUBQUERY

SELECT或WHERE列表中包含了子查询,该子查询被标记为SUBQUERY

DERIVED

FROM列表中包含的子查询被标记为DERIVED(衍生)

UNION

若第二个SELECT出现在UNION之后,则被标记为UNION;若UNION包含在FROM子句的子查询中,外层SELECT将被标记为DERIVED

UNION RESULT

UNION表获取结果的SELECT被标记为UNION RESULT
表示查询中每个select子句的类型(简单OR复杂)

table:执行节点所处理的表名。

type:数据节点在表中找到所需行的方式,又称“访问类型”,表示| All | index | range | ref | eq_ref | const,system | null | 由左至右,由最差到最好。常见类型如下表:

ALL

Full Table Scan, 数据节点将遍历全表以找到匹配的行

Index

Full Index Scan,index与ALL区别为index类型只遍历索引树

Range

索引范围扫描,对索引的扫描开始于某一点,返回匹配值域的行,常见于between、<、>等的查询

Ref

非唯一性索引扫描,返回匹配某个单独值的所有行。常见于使用非唯一索引即唯一索引的非唯一前缀进行的查找

Eq_ref

唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配;常见于主键或唯一索引扫描

Const、system

数据节点对查询某部分进行优化,并转换为一个常量时,使用这些类型访问;如将主键置于where列表中,数据节点就能将该查询转换为一个常量,system是const类型的特例,当查询的表只有一行的情况下,使用system

NULL

数据节点在优化过程中分解语句,执行时甚至不用访问表或索引

  • possible_keys:指出数据节点能使用哪个索引在表中找到行,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用。
  • key:显示数据节点在查询中实际使用的索引,若没有使用索引,显示为NULL
  • Note:查询中若使用了覆盖索引,则该索引仅出现在key列表中。
  • key_len:表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度。key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的。
  • ref:表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值。
  • rows:表示数据节点根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数。
  • Extra:数据节点解决查询的详细信息,尽量避免出现:Using File Sort、Using Temporary。

第二部分包括node_id和sql两个字段:node_id与第一部分中exec_node字段的中括号内序号相关联,表示exec_node每个层次中具体执行SQL语句。具体SQL语句内容则在“sql”字段中显示。

当“sql”字段中出现临时表dbscale_tmp时(dbscale_tmp为EverDB保留字),说明当前SELECT查询涉及跨分片查询,系统性能损耗较高,需要进一步分析SQL语句和表结构性能瓶颈,尽可能避免使用临时表,示例如下。

图6

四 总结

EverDB作为一种典型的基于中间件实现分库分表方案的分布式数据库产品,其执行计划相比于传统集中式数据库的不同之处在于,既包括了SQL在底层各分片表上的执行步骤,也包含proxy如何将SQL进行分布式处理,提高分布式数据库的处理性能,是EverDB基于中间件对执行计划一种特有的实现方式。

 

EverDB执行计划不管从底层数据节点还是中间层,SQL优化算法方面,还有很多值得优化改进的地方。未来,EverDB会持续精进自身的各项能力,努力成为更出色的国产分布式数据库产品。

 

责任编辑:武晓燕 来源: 匠心独运维妙维效
相关推荐
温故知新--EverDB之分布式执行计划
EverDB作为一种典型的基于中间件实现分库分表方案的分布式数据库产品,其执行计划相比于传统集中式数据库的不同之处在于,既包括了SQL在底层各分片表上的执行步骤,也包含proxy如何将SQL进行分布式处理,提高分布式数据库的处理性能,是EverDB基于中间件对执行计划一种特有的实现方式。

2022-11-01 07:25:27

EverDB 数据库 SQL
HarmonyOS 之分布式任务调度
作为开发者,我对技术分论坛中HarmonyOS分布式调度能力比较感兴趣,下面分享一下我在论坛中获得的一些信息。

2020-09-29 19:20:05

鸿蒙
分布式系统安全之分布式系统的类
分布式系统架构通常是多个层的聚合,其中每一层都建立在下层提供的服务和整个发行版提供的协调服务之上。在最低级别,特定设备中的资源(内存、计算、存储、通信)通过该设备上提供的操作系统原语进行访问。

2023-02-11 00:04:17

分布式 系统 安全
Openstack 之分布式存储技术比较
博文作者重点关注Ceph,Swift,HDFS的功能实现和优缺点,适用场景,并在本文中和大家进行讨论和分享。

2015-05-20 15:54:04

Openstack 分布式存储
鸿蒙HarmonyOS 之分布式任务调度
作为开发者,我对技术分论坛中HarmonyOS分布式调度能力比较感兴趣,也在下面分享一下我在论坛中获得的一些信息。

2020-11-06 12:12:35

HarmonyOS
Dapr 可观测性之分布式追踪
Dapr可观测性构件将可观测性与应用解耦,它自动捕捉由构成Dapr控制平面的Daprsidecar和Dapr系统服务产生的流量。

2022-09-25 22:19:24

Dapr 分布式追踪
《我想进大厂》之分布式事务篇
对于分布式事务,相信所有人都应该很了解,为什么会有分布式事务无论是数据量导致的分库,还是现在微服务盛行的场景都是他出现的原因。

2021-01-19 05:43:33

分布式 2PC 3PC
系统设计之分布式计数器
本篇是我在日常工作中总结的两种比较常用且有效的分布式计数器实现方案,如果你的工作中也有用到,也可以尝试尝试。如果暂时没有用到,适当的了解,在面试、日常的工作交流中相信也都会受用。

2022-04-08 07:22:15

分布式 计数器 系统设计
分布式系统安全之分布式系统协调资源聚类
分布式系统通常是根据要交付给客户端的服务来构建的。每个服务都包含并在一个或多个服务器上执行,并导出客户端通过发出请求调用的操作。

2023-02-23 07:55:41

SQL执行计划解析之执行计划基础上篇
执行计划,简单的说就是查询优化器计算的结果,表示执行被提交查询的效率最高的方式。执行计划告诉你查询是如何被执行的,因此它是DBA诊断低性能查询的基础手段。

2011-09-14 17:03:17

数据库 执行计划 解析
大数据之分布式协调神器:Zookeeper选举
分布式系统设计成主从节点主要是为了保障数据一致性,主从设计是一种最直观的数据一致性保障机制。

2021-08-26 08:03:30

大数据 Zookeeper 选举
OpenHarmony 源码解析之分布式任务调度(一)
为了更全面地理解与掌握分布式任务调度子系统,我先从分布式远程启动这个简单的功能开始,利用开源鸿蒙开放的源代码,进行深入学习。

2021-11-10 16:10:18

鸿蒙 HarmonyOS 应用
分布式技术:从原理到应用全面解析分布式技术的魅力与未来之分布式起源
分开部署的方式,所谓分开是指庞大的数据体系分成小的可以独立的数据体系,复杂的系统拆分成功能单一的小的子系统,拆分后的独立体系各自部署在独立的计算机上运行。换个说法就是将相同或相关的程序运行在多台计算机上,从而实现特定目标的一种计算方式。

2024-01-08 08:05:08

分开部署 数据体系 系统拆分
分布式技术:从原理到应用全面解析分布式技术的魅力与未来之分布式衡量指标
对于一个云计算系统而言,常见任务是虚拟主机或容器的创建、资源调整、销毁等操作,如何减少这些操作的完成时间,从而提升用户体验是设计者们要重点关注的。另外,云计算系统本质上卖的是资源,那么降低系统本身的资源开销,也是系统设计的重中之重。

2024-01-09 08:00:58

OpenHarmony 源码解析之分布式数据库
本文基于OpenHarmonyOS3.0LTS来讲解分布式数据服务(DistributedDataService,DDS)提供不同设备间数据库数据分布式的能力。

2021-12-14 10:16:00

鸿蒙 HarmonyOS 应用
聊聊explain查看执行计划
在MySQL性能调优的时候explain是必须要使用的关键字,它的作用是可以查看sql语句的执行信息,包括表的读取顺序,应用到的索引等信息。

2021-03-17 09:35:51

MySQL 数据库 explain
MySQL执行计划Explain详解
使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈

2023-09-21 10:55:51

Mysql SQL 语句
SQL Server 执行计划缓存
了解执行计划对数据库性能分析很重要,其中涉及到了语句性能分析与存储,这也是写这篇文章的目的,在了解执行计划之前先要了解一些基础知识,所以文章前面会讲一些概念,学起来会比较枯燥,但是这些基础知识非常重要。

2015-04-22 14:17:45

SQL SERVER MSSQL SERVE 缓冲区
带你看懂MySQL执行计划
执行计划是指一条SQL语句在经过MySQL查询优化器的优化会后,具体的执行方式。MySQL为我们提供了EXPLAIN语句,来获取执行计划的相关信息。需要注意的是,EXPLAIN语句并不会真的去执行相关的语句,而是通过查询优化器对语句进行分析,找出最优的查询方案,并显示对应的信息。

2021-05-28 10:46:36

MySQL 执行 计划
分布式系统安全之分P2P模型
最初,P2P系统以其对eMule或KaZaA等文件共享应用程序的支持而闻名,尽管它们的使用现在在社交等应用程序中很常见。

2023-02-13 00:20:08

分布式 系统 安全

玻璃钢生产厂家莆田玻璃钢造型雕塑厂家玻璃钢雕塑包装防护白城市玻璃钢雕塑定制发光动物玻璃钢雕塑摆件商场美陈植物广场玻璃钢动物雕塑景洪玻璃钢马雕塑真人大小玻璃钢雕塑成本周口不锈钢人物玻璃钢卡通雕塑江苏佛像玻璃钢雕塑哪家专业玻璃钢雕塑将军马商场有趣互动美陈河北省玻璃钢雕塑哪家好河北商场美陈销售厂家济宁玻璃钢雕塑定做江苏欧式人物玻璃钢雕塑报价多少上海大型商场美陈供货商动物人物玻璃钢雕塑青岛商场美陈现价东莞玻璃钢花盆公司玻璃钢花盆容易裂吗郴州仿铜西式玻璃钢雕塑中山小品玻璃钢雕塑郑州标牌校园玻璃钢景观雕塑安顺玻璃钢商场美陈玻璃钢花盆裂了怎么修补福建常用商场美陈研发公司户外景观玻璃钢雕塑定制云南玻璃钢雕塑加工厂家新泰商场美陈布置香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化