RDS MySQL的写优化功能通过关闭实例的innodb_doublewrite(InnoDB双写机制)来提升写入效率。本文为您介绍该功能的使用方法以及性能测试结果。
背景信息
MySQL的InnoDB引擎采用双写技术确保数据页的原子性,以防止半写错误。当InnoDB需要刷新脏页时,首先将数据写入双写缓冲区;待该缓冲区满后,刷脏线程需等待上一批次的数据完成写盘才能继续。每次刷新数据页都涉及两次写操作,这增加了磁盘I/O资源的消耗。
对于写入密集型应用,磁盘I/O常成为性能瓶颈,InnoDB双写机制会显著增加磁盘带宽负担,进而影响实例整体性能。
功能简介
开启RDS MySQL的写优化功能后,可以确保每次数据页写入的原子性,从而安全地关闭InnoDB双写机制。这不仅降低了I/O写入量,还简化了刷脏过程,大幅度降低实例写盘的IOPS及带宽需求,达到提升实例写性能的目的。测试详情请参见性能测试。
前提条件
数据库引擎及版本:仅支持MySQL 5.7或8.0实例。
存储类型:仅支持ESSD云盘与通用云盘。
开通阶段:仅支持创建实例时或存量倚天版(高可用/集群系列)实例开启写优化功能。
费用说明
写优化功能免费,开启和关闭写优化都不会产生额外费用。
注意事项
开启和关闭写优化功能时,会导致实例重启,请谨慎操作。
主实例开启写优化功能时,无法关闭只读实例的写优化功能,避免因性能不一致导致复制延迟。
创建只读实例与备份恢复场景中,写优化继承原实例配置。
开通写优化
新购实例时标准版实例写优化功能默认关闭,需要手动开通。倚天版实例写优化功能默认开通。
管理写优化
已开通写优化功能的实例才可以在实例基本信息页管理写优化。
访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
在基本信息页面,单击写优化开关,开启或关闭写优化。
性能测试
测试准备
测试资源与方法:本次测试分别在高可用系列通用云盘实例的通用规格和独享规格上执行数据写入操作,观察实例开启写优化功能前后的性能差异。
产品系列
存储类型
实例规格
规格代码
CPU和内存
高可用
通用云盘
通用规格
mysql.n2.large.2c
4核8 GB
高可用
通用云盘
独享规格
mysql.x2.large.2c
4核8 GB
测试工具安装:本文以CentOS系统安装Sysbench为例,你可以执行以下命令进行安装,详情请参见Sysbench官方文档。
git clone https://github.com/akopytov/sysbench.git cd sysbench git checkout 0.5 yum -y install make automake libtool pkgconfig libaio-devel yum -y install mariadb-devel ./autogen.sh ./configure make -j make install
测试数据准备:300 GB数据量(30张数据表,每张表4000万行)
sysbench oltp_write_only --tables=30 --table_size=40000000 --rand-type=special --rand-spec-pct=15 --threads=64 --time=100 prepare
本测试所涉及的参数说明如下。
参数名
描述
tables
表数量,以30张为例。
table_size
每个表的记录行数,以4000万行为例。
rand-type
随机数分布类型,以special为例。
rand-spec-pct
特定随机数分布中被视为“特殊”值的百分比,以15%为例。
threads
并发线程数,以64为例。
time
测试的持续时间(单位:秒),以100秒为例。
测试写性能
在测试实例中执行以下命令,对比开启和关闭写优化功能的QPS性能。
sysbench oltp_write_only --tables=30 --table_size=40000000 --rand-type=special --rand-spec-pct=15 --threads=64 --time=100 run
测试结果
写优化测试结果
4核8 GB标准版高可用系列通用型RDS MySQL实例的测试结果如下:
开启写优化后,QPS性能提升48%。
4核8 GB标准版高可用系列独享型RDS MySQL实例的测试结果如下:
开启写优化后,QPS性能提升47%。
写优化 + IO加速测试结果
关于通用云盘IO加速功能的介绍,请参见通用云盘IO加速功能。
4核8 GB标准版高可用系列通用型RDS MySQL实例的测试结果如下:
开启写优化后,QPS性能提升93%。