前提条件
测试环境
-
测试使用ECS和RDS实例均在同一地域、同一可用区。
-
测试使用ECS和RDS实例在同一VPC内。
-
测试使用ECS信息:
- 规格为s6.4xlarge.2
- 镜像为CentOS 7.9
-
测试使用RDS信息:
- 规格为S2/S7系列下各规格
- 存储类型为超高IO数据盘400G
- 参数模板为RDS默认参数模板
说明2.RDS数据盘大小涉及IOPS及IO吞吐量上限,需确保容量符合IO能力要求。1.ECS规格较高是为了保证测试时性能瓶颈不在ECS端。
测试工具
- Sysbench工具
Sysbench是一个跨平台且支持多线程的模块化基准测试工具,用于评估系统在运行高负载的数据库时相关核心参数的性能表现。
本次测试使用的Sysbench版本为1.0.20。
表1 Sysbench参数说明
参数 | 说明 |
---|---|
db-driver | 数据库引擎。 |
mysql-host | RDS实例连接地址。 |
mysql-port | RDS实例连接端口。 |
mysql-user | RDS实例账号。 |
mysql-password | RDS实例账号对应的密码。 |
mysql-db | RDS实例用于测试的数据库名。 |
table_size | 测试表大小。 |
tables | 测试表数量。 |
events | 测试请求数量。 |
time | 测试时间。 |
threads | 测试并发线程数。 |
percentile | 需要统计的百分比,默认值为95%,即请求在95%的情况下的执行时间。 |
report-interval | 测试进度报告输出频率,表示N秒输出一次测试进度报告。 |
skip-trx | 是否跳过事务。1:跳过0:不跳过 |
- 安装方法
ECS实例执行如下命令安装Sysbench。
sudo yum install gcc gcc-c++ autoconf automake make libtool mysql-devel git mysql
git clone https://github.com/akopytov/sysbench.git #下载Sysbench
cd sysbench #打开sysbench目录
git checkout 1.0.20 #切换到sysbench 1.0.20版本
./autogen.sh1.0.20 #运行autogen.sh
./configure --prefix=/usr --mandir=/usr/share/man
make #编译
make install
ECS执行如下命令调整ulimit限制:
sudo sh -c "ulimit -n 102400 && exec su $LOGNAME"
测试步骤
进行RDS实例的读写混合性能测试,参考如下命令,请根据实际情况填写数据库,用户,密码,端口等信息。
1.创建测试数据库“sbtest”
mysql -u XXX -P XXX -h XXX -p -e "create database sbtest"
2.准备数据
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=80000 --tables=32 --events=0 --time=300 --threads=XXX oltp_read_write prepare
3.运行测试
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=80000 --tables=32 --events=0 --time=300 --threads=XXX --percentile=95 --report-interval=1 oltp_read_write run
4.清理数据
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=80000 --tables=32 --events=0 --time=300 --threads=XXX --percentile=95 oltp_read_write cleanup
测试模型
- 表结构
CREATE TABLE `sbtest32` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`k` int(11) NOT NULL DEFAULT '0',
`c` char(120) NOT NULL DEFAULT '',
`pad` char(60) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `k_32` (`k`)
) ENGINE=InnoDB AUTO_INCREMENT=80001 DEFAULT CHARSET=utf8mb4
- OLTP读写比
Sysbench默认提交的事务中包含18条SQL语句,具体执行语句和条数如下:
表2 OLTP读写比例表
SQL类型 | 比例 | SQL语句 |
---|---|---|
point_selects | 10 | SELECT c FROM sbtest32 WHERE id=? |
simple_ranges | 1 | SELECT c FROM sbtest32 WHERE id BETWEEN ? AND ? |
sum_ranges | 1 | SELECT SUM(k) FROM sbtest32 WHERE id BETWEEN ? AND ? |
order_ranges | 1 | SELECT c FROM sbtest32 WHERE id BETWEEN ? AND ? ORDER BY c |
distinct_ranges | 1 | SELECT DISTINCT c FROM sbtest32 WHERE id BETWEEN ? AND ? ORDER BY c |
index_updates | 1 | UPDATE sbtest32 SET k=k+1 WHERE id=? |
non_index_updates | 1 | UPDATE sbtest32 SET c=? WHERE id=? |
deletes | 1 | DELETE FROM sbtest32 WHERE id=? |
inserts_ignore | 1 | INSERT IGNORE INTO sbtest32 (id, k, c, pad) VALUES (?, ?, ?, ?) |
测试结果
关系数据库MySQL版的性能测试结果请参见: