年度发布解读| PolarDB for MySQL:DDL的优化和演进

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: DDL是PolarDB所有操作中最繁重的一种,曾经为用户带去了很多不好的使用体验。而Instant DDL + Parallel DDL + 物理复制链路优化是切实解决DDL 繁重弊端的重要组合拳。相信经过未来若干版本的迭代和演进,PolarDB DDL将为客户带来体验上翻天覆地的变化。期待未来用户执行DDL操作像执行简单查询一样淡定坦然,PolarDB内核团队将始终如一地为用户打造最佳的云原生关系性数据库管理系统。

>>发布会传送门https://yqh.aliyun.com/live/detail/21691

点击查看详情https://yqh.aliyun.com/live/polardb2021

作者:阿里云数据库 胡庆达,张海平,季育轩

在过去的几年里,我们观察到,当数据达到一定规模后,PolarDB for MySQL(后文简称PolarDB)的部分用户(包括集团内部用户和公有云上的外部客户)更愿意使用gh-ost/pt-osc这样的外部工具来进行DDL操作。PolarDB内核团队为用户case by case地解决了很多DDL使用带来的问题,在处理这些问题的同时,我们也在不断地思考和讨论,云上客户越来越多,中小客户群体不断扩大,我们究竟要如何在内核层面解决DDL日益凸显的繁重弊端,让客户少为DDL担忧。

DDL面临的问题

DDL在生产环境下面临的问题主要来自两个方面:一个是MDL导致的阻塞问题,一个是全量数据复制带来的资源使用问题。

为了保证DD的一致性,MDL被引入来同步DDL,DML和DQL,这使得同一个表上的各种操纵必须在MDL这一粗粒度锁上汇聚,由此引发了各种超时问题,严重影响了上层业务。此外,在PolarDB共享存储结构下,多节点间的DD一致性要求使得这一问题拓展到了读写节点之间,也为用户带来了诸多困扰。

在PolarDB内部,数据物理存储和数据定义是分离的,因此DDL操作常常需要进行全量数据的重建,由此导致了单次DDL操作耗时甚至可以达到天级。这种操作的潜藏风险让用户不得不焦躁地在客户群里反复和研发同学沟通确认。同时,全量数据的重建会占用大量的系统资源。PolarDB的云原生优势已经在相当程度上为客户规避了这一问题,资源的快速弹性伸缩防止了OOM,磁盘空间不足等问题,但是系统资源的大量占用将提高其他操作的耗时,降低数据库的整体吞吐,最终将影响上层业务的稳定性。

此外,在全面上云的大背景下,云上中小客户群体不断扩大,他们中很多还缺乏处理数据库复杂生产环境下的各种细节问题的经验。在我们的观察里,这些客户的DDL操作频率显著高于集团内部用户和其他大客户,DDL使用过程中的很多问题让这些用户焦头烂额。

优化和演进方向

解决DDL带来的问题,本质上我们需要做到的只有一点:降低DDL执行耗时。如果DDL可以在瞬间完成,那么DDL带来的诸多问题都将迎刃而解。于是在这样一种思路的指导下,我们提出了Instant DDL + Parallel DDL + 物理复制链路优化的整体解决方案。
image.png

对于可通过变更数据定义完成的DDL类型,如加列,减列等,我们将其Instant化,使其无需修改存量数据,因而可在瞬间完成;对于必须全量扫描并构建数据的DDL类型,如重建主键索引,新建二级索引等,我们允许其在引擎内部被并行地处理,从而充分利用系统资源,降低执行耗时。

此外,我们还使用了并行MDL同步方案,解决DDL过程MDL在读写节点上的阻塞问题,同时优化了物理复制使用的Redo Log,降低了DDL操作时读节点同步Redo Log的负载。这些物理复制链路上的优化和DDL执行链路上的整体演进共同作用,构成了攻克DDL难关的主力军和护卫队。

Instant DDL

像add column这类DDL,原有的执行逻辑包含两个部份的操作,分别涉及数据字典和存量数据。其中数据字典的修改是非常快速的,但是表全量数据的重建则耗时漫长。
image.png
Instant DDL则仅改变数据字典中的表定义信息,而不修改任何存量数据,从而使得DDL操作可以在瞬间完成。

image.png
目前add column at last instantly已经在PolarDB 5.7和8.0上得到支持, add column at any position instantly和drop column instantly等也将在随后的版本中上线,未来所有逻辑上可Instant 化的DDL操作都将支持Instant算法。用户只需热升级到相应的版本,即可让原本耗时达到小时级甚至天级的DDL操作在瞬间完成。

Parallel DDL

新建二级索引这类DDL操作,执行时必须扫描全量数据,并构建新的索引树,整体耗时非常长。
image.png
Parallel DDL则将Data Scan和B+ Tree Build操作划分成多个子任务,通过内部的并行服务子系统进行调度并适时地执行,最后将各个子任务的执行结果进行合并得到最终结果。
image.png
Parallel DDL 通过存储引擎内部的并行执行,充分利用系统资源,使得部分DDL的执行效率最高可提高十倍以上,从而将整个DDL的时间窗口缩小到原来的十分之一。目前parallelly create secondary index 已经在PolarDB 8.0上得到支持,后续将陆续上线到其他版本,同时其他类型的Parallel DDL支持也将在随后的版本中发布。
image.png

物理复制链路上的DDL优化

Instant DDL 和Parallel DDL 是DDL执行链路上的演进方案。但是在PolarDB共享存储架构下,复制链路上的问题同样制约着DDL的能力。例如为了保证各节点的一致性,必须在读写节点间通过Redo Log同步MDL信息,然而MDL锁的阻塞将影响Redo Log的同步,为此我们采用了并行MDL同步方案,将MDL信息的同步和Redo Log的同步解偶,提高了整个集群在DDL时的吞吐能力。此外我们改进了DDL过程中的Redo Log同步路径,不仅优化了写节点在产生DDL Redo Log时的IO开销,同时让只读节点有选择的同步Redo Log,降低DDL 操作时只读节点的负载,从而降低DDL过程中的读写节点间的同步代价。这些物理复制链路上的优化为DDL执行链路上的优化效果保驾护航,两者协同使得整个集群处理DDL的能力显著增强。

小结

DDL是PolarDB所有操作中最繁重的一种,曾经为用户带去了很多不好的使用体验。而Instant DDL + Parallel DDL + 物理复制链路优化是切实解决DDL 繁重弊端的重要组合拳。相信经过未来若干版本的迭代和演进,PolarDB DDL将为客户带来体验上翻天覆地的变化。期待未来用户执行DDL操作像执行简单查询一样淡定坦然,PolarDB内核团队将始终如一地为用户打造最佳的云原生关系性数据库管理系统。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
22天前
|
SQL 缓存 关系型数据库
MySQL高级篇——关联查询和子查询优化
左外连接:优先右表创建索引,连接字段类型要一致、内连接:驱动表由数据量和索引决定、 join语句原理、子查询优化:拆开查询或优化成连接查询
MySQL高级篇——关联查询和子查询优化
|
22天前
|
算法 关系型数据库 MySQL
MySQL高级篇——排序、分组、分页优化
排序优化建议、案例验证、范围查询时索引字段选择、filesort调优、双路排序和单路排序、分组优化、带排序的深分页优化
MySQL高级篇——排序、分组、分页优化
|
3天前
|
关系型数据库 Unix MySQL
MySQL是一种关系型数据库管理系统
MySQL是一种关系型数据库管理系统
11 2
|
6天前
|
存储 关系型数据库 MySQL
MySQL索引失效及避免策略:优化查询性能的关键
MySQL索引失效及避免策略:优化查询性能的关键
27 3
|
6天前
|
缓存 关系型数据库 MySQL
MySQL数据库优化:提升性能和扩展性的关键技巧
MySQL数据库优化:提升性能和扩展性的关键技巧
14 2
|
6天前
|
监控 关系型数据库 MySQL
如何优化MySQL数据库的索引以提升性能?
如何优化MySQL数据库的索引以提升性能?
14 0
|
6天前
|
监控 关系型数据库 MySQL
深入理解MySQL数据库索引优化
深入理解MySQL数据库索引优化
12 0
|
1月前
|
SQL 关系型数据库 分布式数据库
PolarDB Proxy配置与优化:提升数据库访问效率
【9月更文挑战第6天】PolarDB是阿里云推出的高性能分布式关系型数据库,PolarDB Proxy作为其关键组件,位于客户端与PolarDB集群间,负责SQL请求的解析与转发,并支持连接池管理、SQL过滤及路由规则等功能。本文详细介绍了PolarDB Proxy的配置方法,包括连接池、负载均衡和SQL过滤设置,并探讨了监控调优、缓存及网络优化策略,以帮助提升数据库访问效率。
29 1
|
2月前
|
存储 缓存 负载均衡
【PolarDB-X 技术揭秘】Lizard B+tree:揭秘分布式数据库索引优化的终极奥秘!
【8月更文挑战第25天】PolarDB-X是阿里云的一款分布式数据库产品,其核心组件Lizard B+tree针对分布式环境优化,解决了传统B+tree面临的数据分片与跨节点查询等问题。Lizard B+tree通过一致性哈希实现数据分片,确保分布式一致性;智能分区实现了负载均衡;高效的搜索算法与缓存机制降低了查询延迟;副本机制确保了系统的高可用性。此外,PolarDB-X通过自适应分支因子、缓存优化、异步写入、数据压缩和智能分片等策略进一步提升了Lizard B+tree的性能,使其能够在分布式环境下提供高性能的索引服务。这些优化不仅提高了查询速度,还确保了系统的稳定性和可靠性。
62 5
|
2月前
|
关系型数据库 MySQL 分布式数据库
PolarDB 并行查询问题之保证与MySQL的兼容性如何解决
PolarDB 并行查询问题之保证与MySQL的兼容性如何解决
20 1
下一篇
无影云桌面