当前位置: 首页 > 科技观察

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

时间:2023-03-20 21:06:46 科技观察

背景为什么要回收表空间?您购买的任何存储或实例规格都有容量限制,根据存储介质和存储方式的不同,费用也会有所不同。在线数据库的存储成本相对较高,因此架构师和DBA在系统设计之初就必须考虑满足未来几年的业务需求,同时最大限度地节约成本。这是一种比较合理的架构布局和容量规划方法。大多数系统直接上线,不经过上述步骤。随着业务的发展,会保留越来越多的在线数据。当存储容量不够时,可以通过升级实例规格或硬件来解决,但如果没有更大的规格指定时,只能删除数据恢复表空间。回收表空间的常用方法删除和回收表空间时,通常有以下几种方法:编号删除法适合场景的回收方法缺点1CREATETABLEA'LIKEA;INSERTINTOA'SELECT*FROMAWHERE;DROPTABLEA;RENAMETABLEA'TOA;删除表A;保留更少的数据并删除更多的数据;但是源表上的数据写入要暂停很短的时间(一般在毫秒级完成);2DELETE*FROMAWHERE可能导致性能抖动;ALTERTABLEAENGINE=INNODB;/OPTIMIZETABLEA;ALTERTABLEAENGINE=INNODB;/OPTIMIZETABLEA;多保留数据,少删除数据;DELETE时建议使用DMS无锁数据更改(参考https://help.aliyun.com/document_detail/162507.html),否则DELETE也可能导致性能抖动可能导致性能抖动3ALTERTABLEADROPPARTITIONpartition_name;ALTERTABLEADROPPARTITION分区名称;分区表可能导致性能抖动4DROPTABLEA_0000/A_20100101;DROPTABLEA_0000/A_20100101;已被人为分表存储设置。例如,按照模数或日期分表可能会导致性能抖动。DROPTABLEA可能造成的性能抖动,可以通过阿里云内核进行专门优化。默认启用异步清除大文件(https://help.aliyun.com/document_detail/134095.html)。至于ALTERTABLE的操作,业界开源的有gh-ost、pt-online-schema-change、OnlineSchemaChange。阿里云RDSMySQL也专门开发了无锁结构改动。本文对几种常见的表空间回收方式进行了测试,希望能为开发或运维人员提供一个更稳定的变更参考方式,以保证生产环境的稳定。各种工具对比1.pt-online-schema-change的触发对原表影响较小。pt-online-schema-change的工作原理是创建与源表A相同的表A_gst进行DDL操作,同时在A上创建DML触发器,然后将A中的数据复制到A_gst中,复制过程中产生的增量变化会随着触发器同步更新。复制完成后,执行两张表的重命名操作,完成更改。2、OnlineSchemaChange的工作原理与pt-online-schema-change基本相同。不同的是它使用了异步模式。在A_gst的基础上创建一个log表,trigger的entry更新会直接落在log表中,后台进程将日志表中的条目应用到A_gst表中。这样整个过程是异步的,播放速度也可以控制。3、gh-ost和上面两个变化过程基本相同,只是没有使用触发器的设计,所以增量变化的数据源不是触发器,而是Binlog文件。订阅读取文件中A表的变化记录,解析并应用到A_gst表中。这样的数据对于GST表的回放是非常有利的。binlog中的所有记录都存储在A表中,方便读取,直接应用。4、DMS的无锁结构变更采用无触发器设计,可以有效解决触发器设计带来的锁和数据库开销问题。同时结合DTS,在表空间回收时临时表也会转移到DTS中,这样DTS的同步下游链路就不会中断。为了验证DMS无锁变更的稳定性,做了四项测试:34221号蓝色曲线,benchmarkoltp_insert测试作为对比baseline;34222号绿色曲线,benchmarkoltp_inserttest+DMSlock-freechange+ALTERTABLE[tbname]ENGINE=INNODB;编号34237黄色曲线,benchmarkoltp_inserttest+关闭DMSlock-freechange+RDSkernelALTERTABLE[tbname]ENGINE=INNODB;编号34239灰色曲线,benchmarkoltp_inserttest+关闭DMSlock-freechange+RDSkernelOPTIMIZETABLE[tbname];基于蓝色基线,从图中可以看出,与同样执行恢复表空间的黄色和灰色相比,绿色曲线比较稳定,但持续时间更长;绿色、黄色和灰色曲线到达最后,将临时表重命名为正式表的过程最多需要2s。根据测试结论和实际业务,推荐使用性能相对稳定的DMS无锁变更+ALTERTABLE。要使用DMS的无锁更改,您可以打开DMS控制台,在页面顶部选择所有功能>数据计划>无锁更改。注意事项不支持string类型的主键(dms是逐块复制,最大值和最小值决定复制范围,然后分成若干块复制,会用到很多sql最小最大计算范围)。optimize和alter的原理参考如何使用DMS进行无锁结构变更(https://help.aliyun.com/document_detail/98373.html)(https://developer.aliyun.com/article/579242))