当前位置

在阿里云RDS数据库服务器中将MySQL InnoDB引擎表转为压缩格式

James Qi 在 2015年10月26日 - 16:56 提交
内容摘要:今年以来将我们以前托管或者租用的服务器全面转向阿里云,除了采用ECS服务器以外,还有一项重要的是采用了RDS数据库服务器,这对于服务的稳定性、各项指标的监控、调优等都有帮助。 不过随着近期更多数......

  今年以来将我们以前托管或者租用的服务器全面转向阿里云,除了采用ECS服务器以外,还有一项重要的是采用了RDS数据库服务器,这对于服务的稳定性、各项指标的监控、调优等都有帮助。

  不过随着近期更多数据库转到RDS上,空间的占用、IOPS的升高等问题也越来越明显,增加RDS空间、升级RDS规格肯定是有用的,但一味这样做的话,费用会明显飙升,还是得想办法优化。

  前一阵子也《试用阿里云RDS的MySQL压缩存储引擎TokuDB》,但因为文件数太多超过系统限制而放弃,也尝试过MyISAM引擎和InnoDB引擎的压缩方式,但阿里云客服说MyISAM已经不支持,所以剩下压缩这种方式现在又拿出来尝试。

  进过几个RDS近一周的测试,对我们这种数据库读取量远大于写入量的应用来说,InnoDB表进行压缩有很明显的效果,空间占用大约为原来的50%左右,从而让磁盘读写参数IOPS也有明显下降,真是一举两得!从RDS监控数据看,内存也有下降,CPU按理说应该上升,但也不是很明显。

  单个表转换的SQL语句为:

ALTER TABLE $tableName ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;

  多个表可以用php编写一个循环来查出所有的表(可参考我以前写的《列出MySQL数据库服务器上所有库和表及引擎属性》),从而批量转换。而对于多个库来说则可以写一个.sh脚本多次调用php程序来实现大批量转换。