mysql读写性能测试

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 用mysqlslap进行mysql压力测试 mysqlslap官方文档   mysqlslap菜鸟译文 概述和测试环境 压测的目的是为了尽量模拟真实情况。测试的表都是由10个int型字段和10个字符串型字段组成。每个测试项目都测试了myisam和innodb两个引擎。测试的方法都是用两个线程并发,一共跑10000个请求。 压测的机器用的是自己的笔记本。CPU是Intel(R

用mysqlslap进行mysql压力测试

mysqlslap官方文档  

mysqlslap菜鸟译文

概述和测试环境

压测的目的是为了尽量模拟真实情况。测试的表都是由10个int型字段和10个字符串型字段组成。每个测试项目都测试了myisam和innodb两个引擎。测试的方法都是用两个线程并发,一共跑10000个请求。

压测的机器用的是自己的笔记本。CPU是Intel(R) Core(TM)2 Duo CPU     P8400, 4G内存, SATA硬盘。

mysql服务器端和压测的客户端跑在同一台机器上。mysql的版本是5.5.

用到的mysqlslap参数解释如下:

--concurrency=2 两个线程

--iterations=1 执行一次

--number-int-cols=10 10个int型字段
--number-char-cols=10 10个字符串字段
-a 等同于--auto-generate-sql

--auto-generate-sql-add-autoincrement 创建auto increment的主键
--auto-generate-sql-secondary-indexes=2 创建2列索引

--auto-generate-sql-guid-primary 创建guid作为主键

--number-of-queries=10000 所有并发线程的请求次数和
--auto-generate-sql-load-type=write/key/read/update/mixed 测试的query类型
--engine=myisam,innodb 存储引擎

写性能测试

写性能测试1,不开binlog, guid做主键, 无索引

测试命令:

1 mysqlslap   --concurrency=2\
2             --iterations=1\
3             --number-int-cols=10\
4             --number-char-cols=10\
5             -a\
6             --auto-generate-sql-guid-primary\
7             --number-of-queries=10000\
8             --auto-generate-sql-load-type=write\
9             --engine=myisam,innodb\
结果:
01 Benchmark
02         Runningforengine myisam
03         Average number of seconds to run all queries: 6.110 seconds
04         Minimum number of seconds to run all queries: 6.110 seconds
05         Maximum number of seconds to run all queries: 6.110 seconds
06         Number of clients running queries: 2
07         Average number of queries per client: 5000
08  
09 Benchmark
10         Runningforengine innodb
11         Average number of seconds to run all queries: 10.291 seconds
12         Minimum number of seconds to run all queries: 10.291 seconds
13         Maximum number of seconds to run all queries: 10.291 seconds
14         Number of clients running queries: 2
15         Average number of queries per client: 5000
用myisam每秒处理1639次。

用innodb每秒处理971次。

真实环境中一般会用binlog做数据备份与同步,所以性能会有所下降,有binlog的情况请继续看后面的实验。

写性能测试2, 开binlog, guid做主键, 无索引

测试命令与“写性能测试1”相同,

结果如下:

01 Benchmark
02         Runningforengine myisam
03         Average number of seconds to run all queries: 14.809 seconds
04         Minimum number of seconds to run all queries: 14.809 seconds
05         Maximum number of seconds to run all queries: 14.809 seconds
06         Number of clients running queries: 2
07         Average number of queries per client: 5000
08  
09 Benchmark
10         Runningforengine innodb
11         Average number of seconds to run all queries: 26.721 seconds
12         Minimum number of seconds to run all queries: 26.721 seconds
13         Maximum number of seconds to run all queries: 26.721 seconds
14         Number of clients running queries: 2
15         Average number of queries per client: 5000
myisam每秒处理675次

innodb每秒处理374次

写性能测试3, 开binlog, guid做主键, 有索引

现实情况中,有索引的情况较多。采用 --auto-generate-sql-secondary-indexes=2 创建两列索引。

命令如下:

01 mysqlslap   --concurrency=2\
02             --iterations=1\
03             --number-int-cols=10\
04             --number-char-cols=10\
05             -a\
06             --auto-generate-sql-guid-primary\
07             --auto-generate-sql-secondary-indexes=2\
08             --number-of-queries=10000\
09             --auto-generate-sql-load-type=write\
10             --engine=myisam,innodb\

结果如下:

01 Benchmark
02         Runningforengine myisam
03         Average number of seconds to run all queries: 16.693 seconds
04         Minimum number of seconds to run all queries: 16.693 seconds
05         Maximum number of seconds to run all queries: 16.693 seconds
06         Number of clients running queries: 2
07         Average number of queries per client: 5000
08  
09 Benchmark
10         Runningforengine innodb
11         Average number of seconds to run all queries: 30.418 seconds
12         Minimum number of seconds to run all queries: 30.418 seconds
13         Maximum number of seconds to run all queries: 30.418 seconds
14         Number of clients running queries: 2
15         Average number of queries per client: 5000
myisam每秒处理599次。

innodb每秒处理329次。

写性能测试4,开binglog,auto increment主键,有索引

命令如下:

01 mysqlslap   --concurrency=2\
02             --iterations=1\
03             --number-int-cols=10\
04             --number-char-cols=10\
05             -a\
06             --auto-generate-sql-add-autoincrement\
07             --auto-generate-sql-secondary-indexes=2\
08             --number-of-queries=10000\
09             --auto-generate-sql-load-type=write\
10             --engine=myisam,innodb\
结果如下:
01 Benchmark
02         Runningforengine myisam
03         Average number of seconds to run all queries: 16.785 seconds
04         Minimum number of seconds to run all queries: 16.785 seconds
05         Maximum number of seconds to run all queries: 16.785 seconds
06         Number of clients running queries: 2
07         Average number of queries per client: 5000
08  
09 Benchmark
10         Runningforengine innodb
11         Average number of seconds to run all queries: 28.809 seconds
12         Minimum number of seconds to run all queries: 28.809 seconds
13         Maximum number of seconds to run all queries: 28.809 seconds
14         Number of clients running queries: 2
15         Average number of queries per client: 5000
myisam每秒处理595次。

innodb每秒处理347次。



读性能测试

在真实的情况中,我们最主要的读操作其实就是用主键去查找表中的一行。 我主要是对这种行为进行测试。所以采用的load-type = key ,而不是read。 read是对全表进行读取,可是实际上这种情况很少出现。

读性能测试1,guid主键

命令如下:

01 mysqlslap   --concurrency=2\
02             --iterations=1\
03             --number-int-cols=10\
04             --number-char-cols=10\
05             -a\
06             --auto-generate-sql-guid-primary\
07             --auto-generate-sql-unique-query-number=10000\
08             --auto-generate-sql-load-type=key\
09             --number-of-queries=10000\
10             --engine=myisam,innodb\
结果如下:
01 Benchmark
02         Runningforengine myisam
03         Average number of seconds to run all queries: 4.215 seconds
04         Minimum number of seconds to run all queries: 4.215 seconds
05         Maximum number of seconds to run all queries: 4.215 seconds
06         Number of clients running queries: 2
07         Average number of queries per client: 5000
08  
09 Benchmark
10         Runningforengine innodb
11         Average number of seconds to run all queries: 3.917 seconds
12         Minimum number of seconds to run all queries: 3.917 seconds
13         Maximum number of seconds to run all queries: 3.917 seconds
14         Number of clients running queries: 2
15         Average number of queries per client: 5000
myisam每秒处理2372次

innodb每秒处理2553次

读性能测试2,auto increment主键

命令如下

01 mysqlslap   --concurrency=1\
02             --iterations=1\
03             --number-int-cols=10\
04             --number-char-cols=10\
05             -a\
06             --auto-generate-sql-add-autoincrement\
07             --auto-generate-sql-unique-query-number=10000\
08             --auto-generate-sql-load-type=key\
09             --number-of-queries=10000\
10             --engine=myisam,innodb\
结果如下:
01 Benchmark
02         Runningforengine myisam
03         Average number of seconds to run all queries: 4.555 seconds
04         Minimum number of seconds to run all queries: 4.555 seconds
05         Maximum number of seconds to run all queries: 4.555 seconds
06         Number of clients running queries: 1
07         Average number of queries per client: 10000
08  
09 Benchmark
10         Runningforengine innodb
11         Average number of seconds to run all queries: 4.402 seconds
12         Minimum number of seconds to run all queries: 4.402 seconds
13         Maximum number of seconds to run all queries: 4.402 seconds
14         Number of clients running queries: 1
15         Average number of queries per client: 10000
myisam每秒处理2195次。

innodb每秒处理2273次。


实验结果

项目 myisam每秒吞吐量 innodb每秒吞吐量

写性能测试1,不开binlog, guid主键, 无索引

1639 971

写性能测试2,开binlog,guid主键,无索引

675 374

写性能测试3, 开binlog, guid做主键, 有索引

599 329

写性能测试4,开binglog,auto increment主键,有索引

595 347

读性能测试1,guid主键

2372 2553

读性能测试2,auto increment主键

2195 2273


结论

1 在开启了binlog后, mysql写性能下降60%

2 myisam与innodb相比,写的速度更快(快40%), 读的速度差不多。


转载

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
8月前
|
SQL 缓存 关系型数据库
使用温InnoDB缓冲池启动MySQL测试
使用温InnoDB缓冲池启动MySQL测试
143 0
|
8月前
|
SQL 缓存 关系型数据库
MySQL8.4 Enterprise安装Firewall及测试
MySQL8.4 Enterprise安装Firewall及测试
240 0
|
8月前
|
安全 关系型数据库 MySQL
MySQL8使用物理文件恢复MyISAM表测试
MySQL8使用物理文件恢复MyISAM表测试
139 0
|
9月前
|
Oracle 关系型数据库 MySQL
使用崖山YMP 迁移 Oracle/MySQL 至YashanDB 23.2 验证测试
这篇文章是作者尚雷关于使用崖山YMP迁移Oracle/MySQL至YashanDB 23.2的验证测试分享。介绍了YMP的产品信息,包括架构、版本支持等,还详细阐述了外置库部署、YMP部署、访问YMP、数据源管理、任务管理(创建任务、迁移配置、离线迁移、校验初始化、一致性校验)及MySQL迁移的全过程。
|
Java 关系型数据库 MySQL
自动化测试项目实战笔记(一):JDK、Tomcat、MySQL、Jpress环境安装和搭建
这篇文章是关于自动化测试项目实战笔记,涵盖了JDK、Tomcat、MySQL、Jpress环境的安装和搭建过程,以及测试用例和常见问题总结。
283 1
自动化测试项目实战笔记(一):JDK、Tomcat、MySQL、Jpress环境安装和搭建
|
关系型数据库 MySQL 测试技术
【赵渝强老师】MySQL的基准测试与sysbench
本文介绍了MySQL数据库的基准测试及其重要性,并详细讲解了如何使用sysbench工具进行测试。内容涵盖sysbench的安装、基本使用方法,以及具体测试MySQL数据库的步骤,包括创建测试数据库、准备测试数据、执行测试和清理测试数据。通过这些步骤,可以帮助读者掌握如何有效地评估MySQL数据库的性能。
433 5
|
关系型数据库 MySQL OLTP
性能工具之 MySQL OLTP Sysbench BenchMark 测试示例
【8月更文挑战第6天】使用 pt-query-digest 工具分析 MySQL 慢日志性能工具之 MySQL OLTP Sysbench BenchMark 测试示例
835 0
性能工具之 MySQL OLTP Sysbench BenchMark 测试示例
|
数据库
基于PHP+MYSQL开发制作的趣味测试网站源码
基于PHP+MYSQL开发制作的趣味测试网站源码。可在后台提前设置好缘分, 自己手动在数据库里修改数据,数据库里有就会优先查询数据库的信息, 没设置的话第一次查询缘分都是非常好的 95-99,第二次查就比较差 , 所以如果要你女朋友查询你的名字觉得很好 那就得是她第一反应是查和你的缘分, 如果查的是别人,那不好意思,第二个可能是你。
194 3
|
关系型数据库 MySQL 测试技术
使用docker部署MySQL测试环境
使用docker部署MySQL测试环境
271 0
|
SQL 缓存 关系型数据库
MySQL配置简单优化与读写测试
MySQL配置简单优化与读写测试
177 0

推荐镜像

更多