【MySQL】性能测试方法

发布于:2024-12-18 ⋅ 阅读:(123) ⋅ 点赞:(0)

本页主要介绍关系数据库MySQL版的性能测试方法。

测试环境

  • 测试使用ECS和RDS实例均在同一地域、同一可用区。

  • 测试使用ECS和RDS实例在同一VPC内。

  • 测试使用ECS信息:

    • 规格为s6.4xlarge.2
    • 镜像为CentOS 7.9
  • 测试使用RDS信息:

    • 规格为S2/S7系列下各规格
    • 存储类型为超高IO数据盘400G
    • 参数模板为RDS默认参数模板

说明

1.ECS规格较高是为了保证测试时性能瓶颈不在ECS端。

2.RDS数据盘大小涉及IOPS及IO吞吐量上限,需确保容量符合IO能力要求。

测试工具

  • 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 (?, ?, ?, ?)

压测场景

压测分两个场景进行,您可以根据自身数据量判断使用哪种场景。

  • 内存命中型:适用于数据量较小的场景,可将数据全量放入Buffer Pool进行存取。Buffer Pool默认大小为实例内存规格的50%-70%。
  • 磁盘I/O型:适用于数据量大的场景,只将最常访问的数据放入Buffer Pool进行存取,压测时会读写磁盘以及更新Buffer Pool。

压测指标

压力测试的指标包括TPS和QPS。

RDS for MySQL支持的IOPS取决于云硬盘的IO性能,具体请参见《云硬盘产品简介》中“产品规格”的内容。

地域

由于不同地域的底层技术架构差异,RDS for MySQL的测试数据在不同地域有所差异,按地域分为以下A/B两类测试结果以供参考。地域A包括所有I 类型资源池(以上海7为例),地域B包括II 类型资源池(以华东1为例)。

测试结果

以下测试结果仅供参考,建议开通实例进行实际测试。

地域A

  • 场景1、内存命中型
实例规格 单表数据量 表数量 支持最大连接数 TPS QPS
2核4GB(S2型) 80000 32 1000 517 10343
2核8GB(S2型) 80000 32 2000 571 11428
4核8GB(S2型) 80000 32 2000 1064 21296
  • 场景2、磁盘I/O型
实例规格 单表数据量 表数量 支持最大连接数 TPS QPS
4核16 GB(S2型) 800000 128 5000 718 14355
4核32 GB(S2型) 800000 128 10000 917 18357
8核16 GB(S2型) 800000 128 5000 744 14897
8核32 GB(S2型) 800000 128 10000 1681 33658
8核64 GB(S2型) 800000 128 10000 1743 34891
16核32 GB(S2型) 800000 128 10000 2309 46183
16核64 GB(S2型) 800000 128 10000 2990 59812
32核64 GB(S2型) 800000 128 10000 3372 67455

地域B

  • 场景1、内存命中型
实例规格 单表数据量 表数量 支持最大连接数 TPS QPS
2核4 GB(S7型) 80000 32 1000 844 16874
2核8 GB(S7型) 80000 32 2000 854 17089
4核8 GB(S7型) 80000 32 2000 1677 33548
  • 场景2、磁盘I/O型
实例规格 单表数据量 表数量 支持最大连接数 TPS QPS
8核32 GB(S7型) 800000 128 10000 2111 42225
16核32 GB(S7型) 800000 128 10000 2250 44991
16核64 GB(S7型) 800000 128 10000 5579 111575
32核64 GB(S7型) 800000 128 10000 8720 174394

 


网站公告

今日签到

点亮在社区的每一天
去签到