MySQL佳实践:空间优化
作者:阿里云RDS 发布时间:[ 2016/7/27 11:07:22 ] 推荐标签:数据库 MySQL
在前三期介绍了RDS for MySQL参数优化,锁问题以及延迟优化佳实践之后,本期将介绍存储空间相关的佳实践。
存储空间是RDS很重要的一个指标,在RDS的工单问题中,空间问题的咨询可以排在top 5,当RDS的实际使用空间超过了购买的空间后,实例会被锁定了,这样会导致应用无法再写入,更新数据,造成应用的报错。在RDS的控制台中可以设定空间的报警阀值,当实例空间到达报警阀值后用户会收到报警短信, 这个时候用户则需要对判断当前的空间增长是否合理。
如果增长合理则需要对实例的进行弹性升级,这里需要指出的是弹性升级分为两种:
· 本地升降级:该类升级是实例所在的主机磁盘空间充足,足以容纳升级所需的空间,这个时候的升级非常迅速,而且对应用毫无影响;
· 跨机升级:该类升级时实例所在的主机剩余磁盘空间不足以容纳升级所需的空间,那么需要将实例迁移到其他磁盘资源足够的主机上,这时需要的时间可能会很长,取决于实例的总空间大小,因为迁移过程涉及将备份拷贝还原到新的主机上,同时还要考虑新实例与旧实例的数据同步问题,那么这一些因素都会导致升级时间较长,后升级结束时候数据库中的已有连接会全部断开(备注:高安全访问链路没有此问题)。
如果增长不合理,则需要进行快速的判断问题出现在哪,
也需要我们了解RDS的空间组成到底包括了哪些。在RDS控制台中可以看到空间的组成分为了5部分,分别为:
· 磁盘总空间
· 数据空间
· 日志空间
· 临时文件空间
· 系统文件空间
接下来我们将一一介绍一下这些文件组成:
数据文件
顾名思义该文件空间是指的存放数据的文件,对应到数据库中是一张张的表,表的组成主要包括:数据和索引两类,所以当你看到你的数据文件占用 实例的空间非常多的时候,你需要看一下到底是哪一张表占用了我的空间,用户可以通过数据库的数据字典找到系统中占用大的表:
select TABLE_SCHEMA,TABLE_NAME,INDEX_LENGTH/1024/1024 as index_M,DATA_LENGTH/1024/1024 as data_M from TABLES order by (INDEX_LENGTH+DATA_LENGTH) desc limit 10;
凡事预则立,不预则废,我们可以未雨绸缪,在设计应用的初期考虑好系统的存储:
1、未来数据的增长趋势,决定磁盘的空间大小;
2、数据的生命保留周期,决定是否进行数据删除或归档;
3、设计表选用合理的数据类型,字段大小,存储引擎,进行分区还是分表;
下图的案例中,数据空间占用了实例大量的空间,那么可以通过上述方法定位数据库中到底是那些张表占用空间导致的问题:
常见的空间问题:
1、对表进行数据删除后空间不会进行释放
佳实践:需要对表进行重建,重建的方法:Optimize table xxxxx,该方法在5.6以下会导致锁表,RDS 5.6支持在线重建。
2、大表索引占用的空间比数据空间还大
佳实践:需要将表中无用或者重复的索引删除,删除索引需要特别注意该索引是否还在使用。
3、大表主要用作日志型业务数据存储,基本都是插入,很少查询
佳实践:可以使用tokudb引擎将表中的数据进行压缩,通常压缩效率在3倍以上,注意使用tokudb引擎需要调整tokudb的buffer, 可参考参数优化loose_tokudb_buffer_pool_ratio。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11