mysql读写性能测试

用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%), 读的速度差不多。

转载

转载地址

时间: 2024-11-08 18:53:13

mysql读写性能测试的相关文章

mysql服务器性能测试怎么做

问题描述 mysql服务器性能测试怎么做 本人新搭建好一个mysql服务器,它的性能和处理能力该怎样来测试呢?包括用哪个工具,关注哪些性能参数? 解决方案 有很多这样的工具,比如说 mysqlslap Super-smack MySQL Benchmark loadrunner 但是不是说用工具就能准确度量出你的服务器性能了,因为工具仅仅是工具,压力测试仅仅是模拟测试. 真实场景下业务是多种多样的,用户的真实访问,真实的数据和查询请求不是简单靠工具能模拟出来的,dba的经验在这里非常关键. 解决

PHP实现MySQL读写分离

本代码是从uchome的代码修改的,是因为要解决uchome的效率而处理的.PHP实现的Mysql读写分离 本代码是从uchome的代码修改的,是因为要解决uchome的效率而处理的. PHP实现的Mysql读写分离 主要特性: 简单的读写分离 一个主数据库,可以添加更多的只读数据库 读写分离但不用担心某些特性不支持 缺点:同时连接两个数据库 英文比较烂,也写几个字吧 php code for mysql read/write split feature: simply rw split one

PHP实现的Mysql读写分离

本代码是从uchome的代码修改的,是因为要解决uchome的效率而处理的.这个思维其实很久就有了,只是一直没有去做,相信也有人有同样的想法,如果有类似的,那真的希望提出相关的建议. 封装的方式比较简单,增加了只读数据库连接的接口扩展,不使用只读数据库也不影响原代码使用.有待以后不断完善.. 为了方便,试试建立了google的一个项目: http://code.google.com/p/mysql-rw-php/ 希望给有需要的朋友带来帮助. PHP实现的Mysql读写分离 主要特性: 简单的读

使用PHP实现Mysql读写分离

本代码是从uchome的代码修改的,是因为要解决uchome的效率而处理的.这个思维其实很久就有了,只是一直没有去做,相信也有人有同样的想法,如果有类似的,那真的希望提出相关的建议. 封装的方式比较简单,增加了只读数据库连接的接口扩展,不使用只读数据库也不影响原代码使用.有待以后不断完善.. 为了方便,试试建立了google的一个项目:http://code.google.com/p/mysql-rw-php/希望给有需要的朋友带来帮助. PHP实现的Mysql读写分离主要特性:1.简单的读写分

MySQL读写分离技术

阅读目录 1.简介 2.基本环境 3.配置主从复制 4.MySQL读写分离配置 4.1.安装lua 4.2.安装mysql-proxy 5.MySQL读写分离测试 1).修改rw-splitting.lua文件 2).修改完成后,启动mysql-proxy 3).创建用于读写分离的数据库连接用户 4).测试登陆账号proxy1@192.168.95.13进行添加数据 5).关闭12mysql的从复制 6).证明写分离 7).证明读分离 6.建议 回到顶部 1.简介 当今MySQL使用相当广泛,随

mysql 声明式事务-声明式事务与mysql读写库配置问题

问题描述 声明式事务与mysql读写库配置问题 10C 原来项目用的spring声明式事务处理 现在需要加上mysql的读写库 应用层使用的是aop切换数据库连接 但是读的时候有时候是读库 有时候是写库 不知道是否和声明式事务处理有关 各位大大帮忙看看 applicationContext.xml <.....省略配置> <.....省略配置> <!-- write --> <!-- read --> tx:attributes <...省略...&g

云服务器 ECS 配置:利用MySQL读写分离,提升应用数据吞吐性能

利用MySQL读写分离,提升应用数据吞吐性能 背景 一般情况下,对数据库的读和写都在同一个数据库服务器中操作时,业务系统性能会降低.为了提升业务系统性能,优化用户体验,可以通过读写分离来减轻主数据库的负载.本篇文章分别从应用层和系统层来介绍读写分离的实现方法. 应用层实现方法: 应用层中直接使用代码实现,在进入Service之前,使用AOP来做出判断,是使用写库还是读库,判断依据可以根据方法名判断,比如说以query.find.get等开头的就走读库,其他的走写库. 优点: 1.多数据源切换方便

Magento数据库配置选项,以及mysql 读写分离

1.数据库配置 [mysqld] key_buffer = 512M max_allowed_packet = 64M table_cache = 512 sort_buffer_size = 4M read_buffer_size = 4M read_rnd_buffer_size = 2M myisam_sort_buffer_size = 64M tmp_table_size = 128M query_cache_size = 96M query_cache_type = 1 thread

spring aop实现mysql读写分离(可用于SAE的mysql数据库)

spring aop实现mysql读写分离(可用于SAE的mysql数据库)  发表于 2014-3-12 12:46:53 |只看该作者 |倒序浏览          前言:SAE的MySQL数据库提供了主从数据库,我们可以向主数据库写数据,同时从从库里面读取数.如果在程序中不做数据库的读写切换是无法正常使用SAE的MYSQL数据库的,我们可以使用spring的aop功能实现mysql主从数据库的切换          在application-datasource.xml中配置master和