几种常见的 MySQL/PolarDB-MySQL 回收表空间方法对比

背景

为什么需要回收表空间?任何一个存储或您购买的实例规格都有容量限制,并且根据存储介质不同,保存方式不同,相应地成本也会不同。在线数据库的存储成本是比较高的,所以架构师和DBA在系统设计之初就要考虑满足未来几年内的业务需求,同时又能最大化地节省成本,这是比较合理的架构布局和容量规划的方法。而大多数系统是没有经过以上步骤直接上线的,这种随着业务的发展在线数据会保留的越来越多,当存储容量不够时可以通过升级实例规格或硬件解决,但如果没有更大的规格时,只能删除数据回收表空间了。

回收表空间的常见方法

在删除回收表空间时,通常有以下几种方法:

编号删除方法回收方法适合场景
1CREATE TABLE A' LIKE A;INSERT INTO A' SELECT * FROM A WHERE ;DROP TABLE A;RENAME TABLE A' TO A;DROP TABLE A;保留数据少,删除数据多;但要极短时间暂停源表上的数据写入(通常毫秒级别完成);可能会引起性能抖动
2DELETE * FROM A WHERE ;ALTER TABLE A ENGINE=INNODB;/OPTIMIZE TABLE A;ALTER TABLE A ENGINE=INNODB;/OPTIMIZE TABLE A;保留数据多,删除数据少;建议DELETE时用DMS的无锁数据变更(参考https://help.aliyun.com/document_detail/162507.html),否则DELETE时也可能引起性能抖动可能会引起性能抖动
3ALTER TABLE A DROP PARTITION partition_name;ALTER TABLE A DROP PARTITION partition_name;分区表可能会引起性能抖动
4DROP TABLE A_0000/A_20100101;DROP TABLE A_0000/A_20100101;已经人为分表存储设置,如:按取模或日期分表可能会引起性能抖动

针对DROP TABLE A可能会带来的性能抖动可以通过阿里云内核经过特殊优化Purge Large File Asynchronously(https://help.aliyun.com/document_detail/134095.html)默认已经打开。而对于ALTER TABLE的操作,目前业界开源的有gh-ost、pt-online-schema-change和OnlineSchemaChange

,阿里云RDS MySQL也专门研发了无锁结构变更。本文针对几种常见的表空间回收的方式做了测试,希望给开发或运维人员提供更稳定的变更参考方式,保障生产环境的稳定性。

各类工具对比

1.比pt-online-schema-change的trigger对原表影响较小

pt-online-schema-change的工作原理是创建和源表A一样的表A_gst执行DDL操作,同时在A上创建一个DML触发器,然后将A中的数据拷贝到A_gst,在拷贝过程中产生的增量变更就用触发器完成同步更新。拷贝结束后执行两张表的rename操作完成变更。

2.OnlineSchemaChange

工作原理和pt-online-schema-change基本一致,不同的地方是它采用的是异步模式,在A_gst的基础上创建了一张日志表,触发器的条目更新将直接落在日志表中,后台进程将日志表中的条目应用到A_gst表。这样整个流程上是异步的,也能够控制回放速度。

3.gh-ost

与上面两种变更流程基本一致,但是没有使用触发器的设计,所以增量变更的数据来源不是触发器,而是Binlog文件。订阅读取该文件中A表的变更记录,将记录解析并应用到A_gst表。这样的数据对于gst表回放非常有利,binlog中存储的都是A表的记录,易于直接读取和应用。

4.DMS的无锁结构变更

采用了无触发器的设计,能有效解决触发器设计带来的锁、数据库开销等问题。同时和DTS的联动,执行表空间回收时会把临时表也传送到DTS,这样DTS的同步下游链路不会中断。

为了验证DMS的无锁变更的稳定性,做了4次测试分别是:

  • 编号34221蓝色曲线,基准oltp_insert测试作为对比基线;
  • 编号34222绿色曲线,基准oltp_insert测试+DMS的无锁变更+ALTER TABLE [tbname] ENGINE=INNODB;
  • 编号34237黄色曲线,基准oltp_insert测试+关闭DMS的无锁变更+RDS kernel ALTER TABLE [tbname] ENGINE=INNODB;
  • 编号34239灰色曲线,基准oltp_insert测试+关闭DMS的无锁变更+RDS kernel OPTIMIZE TABLE [tbname];

以蓝色基线为基准,从图中可以看出绿色曲线相较于同样是执行回收表空间的黄色和灰色平稳,但持续时间较长;绿色、黄色、灰色曲线到最后都会临时表重命名成正式表的过程,最多2s。

测试结论

结合实际业务来说推荐性能比较稳定的DMS无锁变更+ALTER TABLE。使用DMS的无锁变更可以打开DMS控制台,在页面顶部,选择全部功能 > 数据方案 > 无锁变更

注意事项

1.不支持字符串类型的主键(dms是一块一块的拷贝,最大值和最小值确定拷贝范围,然后分成若干块拷贝,会用到很多min max计算范围的SQL)

参考

如何用DMS进行无锁结构变更(https://help.aliyun.com/document_detail/98373.html)

关于optimize和alter的原理(https://developer.aliyun.com/article/579242)

原文链接

本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/510571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Lindorm-Operator云原生实践

背景介绍: 随着 Kubernetes 使用的越来越广泛,k8s管理的native的对象资源有时并不能满足用户的需求,为了提高可扩展性,自 v1.7 以来,Kubernetes 引入了 CRD 机制(CustomResourceDefinition)&am…

客户端单元测试实践 — C++篇

背景 我们团队在手淘中主要负责BehaviX模块,代码主要是一些逻辑功能,很少涉及到UI,为了减少双端不一致问题、提高性能,我们采用了将核心代码C化的策略。 由于团队项目偏底层,测试同学难以完全覆盖,回归成…

基于 RTS 超低延时直播优化强互动场景体验

RTS 在阿里云视频直播的基础上进行底层技术优化,通过集成阿里云播放器 SDK,支持在千万级并发场景下节点间毫秒级延时直播的能力,弥补了传统直播存在 3~6 秒延时的问题,确保了超低延时、低卡顿、秒开流畅的直播观看体验。本文介绍了…

一文详解用 eBPF 观测 HTTP

前言 随着eBPF推出,由于具有高性能、高扩展、安全性等优势,目前已经在网络、安全、可观察等领域广泛应用,同时也诞生了许多优秀的开源项目,如Cilium、Pixie等,而iLogtail 作为阿里内外千万实例可观测数据的采集器&…

面向云时代的龙蜥操作系统,是 CentOS 替代的最佳选择

2022 开放原子全球开源峰会 OpenAnolis 分论坛上,阿里云智能基础软件产品经理张鹏程做了《面向云时代的龙蜥操作系统,应对 CentOS 停服的最佳选择》的主题分享,介绍了操作系统产业迎来新发展格局,龙蜥致力于成为 CentOS 迁移的最佳…

数据库治理利器:动态读写分离

背景 在分布式系统架构中,业务的流量都是端到端的。每个请求都会经过很多层处理,比如从入口网关再到 Web Server 再到服务之间的调用,再到服务访问缓存或 DB 等存储。 对于我们的系统来说,数据库是非常重要的一块。因此无论是在稳…

为什么我要迁移 SpringBoot 到函数计算

为什么要迁移? 我们的业务有很多对外提供服务的 RESTful API,并且要执行很多不同的任务,例如同步连锁 ERP 中的商品信息到美团/饿了么等平台,在线开发票等。由于各种 API 和任务执行的不确定性,经常会因为资源不足导致…

Ingress Nginx 接连披露高危安全漏洞,是否有更好的选择?

今年 K8s Ingress Nginx 项目接连披露了三个高危安全漏洞(CVE-2021-25745[1], CVE-2021-25746[2], CVE-2021-25748[3]),该项目也在近期宣布将停止接收新功能 PR,专注修复并提升稳定性。Ingress Nginx 作为 K8s 项目自带的网关组件…

浅谈数据仓库架构设计

1. 数据中台与DW/BI/DSS 个人认为数据中台本质上是一种新的适配大数据技术发展的新的“数据仓库-决策支持(商业智能)”架构。这个架构是构建在传统的架构基础之上,对传统架构的一种新的发展。 数据中台从企业的视角出发,要求企业…

RocketMQ 消息集成:多类型业务消息 - 定时消息

引言 Apache RocketMQ 诞生至今,历经十余年大规模业务稳定性打磨,服务了 100% 阿里集团内部业务以及阿里云数以万计的企业客户。作为金融级可靠的业务消息方案,RocketMQ 从创建之初就一直专注于业务集成领域的异步通信能力构建。 本篇将继续…

一文读懂 BizDevOps:数字化转型下的技术破局

我们正迈向数字经济时代,数字化转型成为普遍行动。未来绝大多数业务都将运行在数字基座之上,软件系统成为业务创新和发展的核心引擎。在这一趋势下,产品研发的交付能力面临巨大挑战,产品研发的交付实践和方法亟待变革。 BizDevOp…

地址标准化服务AI深度学习模型推理优化实践

导读 深度学习已在面向自然语言处理等领域的实际业务场景中广泛落地,对它的推理性能优化成为了部署环节中重要的一环。推理性能的提升:一方面,可以充分发挥部署硬件的能力,降低用户响应时间,同时节省成本;…

淘系数据模型治理最佳实践

导读:本次分享题目为淘系数据模型治理,主要介绍过去一年淘系数据治理工作的一些总结。 具体将围绕以下4部分展开 模型背景&问题2问题分析3治理方案4未来规划 模型背景&问题 1.整体情况 首先介绍一下淘系的整体数据背景。 淘系的数据中台成立…

【走进RDS】之SQL Server性能诊断案例分析

客户的困扰 前几天某程序员小王向阿里云咨询他的SQL Server数据库整体负载较高,是否有优化的方法?前几天另外一个工单则是需要阿里云工程师帮忙定位某一个时刻的数据库性能尖刺的问题。 这些都是常见的性能诊断工单,其实数据库性能诊断不仅…

用了那么久的 Lombok,你知道它的原理么?

序言 在写Java代码的时候,最烦写setter/getter方法,自从有了Lombok插件不用再写那些方法之后,感觉再也回不去了,那你们是否好奇过Lombok是怎么把setter/getter方法给你加上去的呢?有的同学说我们Java引入Lombok之后会…

Fury:一个基于JIT动态编译的高性能多语言原生序列化框架

Fury是一个基于JIT动态编译的多语言原生序列化框架,支持Java/Python/Golang/C等语言,提供全自动的对象多语言/跨语言序列化能力,以及相比于别的框架最高20~200倍的性能。 引言 过去十多年大数据和分布式系统蓬勃发展,序列化是其…

阿里云丁宇:以领先的云原生技术,激活应用构建新范式

8 月 11 日,2022 阿里云飞天技术峰会在深圳举行,会上阿里云提出云原生激活应用构建三大范式,并发布最新的产品与解决方案。基于分布式云容器平台 ACK One,实现多地域分布式系统一致管理;发布 ACK FinOps 解决方案&…

操作系统的“冷板凳”要坐多久?万字长文解读16年开源老兵的坚持

想知道内核研发是怎样的体验?操作系统的“冷板凳”得坐多久才有春天?本文对话龙蜥社区理事长马涛,畅所欲言聊开源,一起来看看那些开源润物细无声背后的故事以及龙蜥社区运营的道法术。 高门槛的 Linux 内核研发,如何支…

在阿里做前端程序员,我是这样规划的

前端程序员常问的几个问题 此文来自一次团队内的分享。我是来自大淘宝技术内容前端团队的胤涧,负责内容中台技术。我的习惯是每个新财年初都会进行一次分享《HOW TO BE AN EMINENT ENGINEER》,聊聊目前团队阵型、OKR、业务和技术大图,聊聊我作…

如何可视化编写和编排你的 K8s 任务

简介 K8s Job 是 Kubernetes 中的一种资源,用来处理短周期的 Pod,相当于一次性任务,跑完就会把 Pod 销毁,不会一直占用资源,可以节省成本,提高资源利用率。 阿里任务调度 SchedulerX 和云原生结合&#x…