文档章节

mysql读写性能测试

costaxu
 costaxu
发布于 2013/02/14 00:30
字数 1568
阅读 16176
收藏 105

近来工作中用mysql较多,但其实自己对mysql性能并不十分了解。前阵子正好读到一篇写用mysqlslap压测mysql性能的文章,于是自己也尝试了一下mysqlslap并且得到一些数据和结论。把压测到的数据与大家分享,如有谬误之处请指正。若需要详细了解本文使用的压力测试工具mysqlslap请移步下面的链接:  

用mysqlslap进行mysql压力测试

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做主键, 无索引

测试命令:

mysqlslap   --concurrency=2\
            --iterations=1\
            --number-int-cols=10\
            --number-char-cols=10\
            -a\
            --auto-generate-sql-guid-primary\
            --number-of-queries=10000\
            --auto-generate-sql-load-type=write\
            --engine=myisam,innodb\
结果:
Benchmark
        Running for engine myisam
        Average number of seconds to run all queries: 6.110 seconds
        Minimum number of seconds to run all queries: 6.110 seconds
        Maximum number of seconds to run all queries: 6.110 seconds
        Number of clients running queries: 2
        Average number of queries per client: 5000

Benchmark
        Running for engine innodb
        Average number of seconds to run all queries: 10.291 seconds
        Minimum number of seconds to run all queries: 10.291 seconds
        Maximum number of seconds to run all queries: 10.291 seconds
        Number of clients running queries: 2
        Average number of queries per client: 5000
用myisam每秒处理1639次。

用innodb每秒处理971次。

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

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

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

结果如下:

Benchmark
        Running for engine myisam
        Average number of seconds to run all queries: 14.809 seconds
        Minimum number of seconds to run all queries: 14.809 seconds
        Maximum number of seconds to run all queries: 14.809 seconds
        Number of clients running queries: 2
        Average number of queries per client: 5000

Benchmark
        Running for engine innodb
        Average number of seconds to run all queries: 26.721 seconds
        Minimum number of seconds to run all queries: 26.721 seconds
        Maximum number of seconds to run all queries: 26.721 seconds
        Number of clients running queries: 2
        Average number of queries per client: 5000
myisam每秒处理675次

innodb每秒处理374次

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

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

命令如下:

mysqlslap   --concurrency=2\
            --iterations=1\
            --number-int-cols=10\
            --number-char-cols=10\
            -a\
            --auto-generate-sql-guid-primary\
            --auto-generate-sql-secondary-indexes=2\
            --number-of-queries=10000\
            --auto-generate-sql-load-type=write\
            --engine=myisam,innodb\

结果如下:

Benchmark
        Running for engine myisam
        Average number of seconds to run all queries: 16.693 seconds
        Minimum number of seconds to run all queries: 16.693 seconds
        Maximum number of seconds to run all queries: 16.693 seconds
        Number of clients running queries: 2
        Average number of queries per client: 5000

Benchmark
        Running for engine innodb
        Average number of seconds to run all queries: 30.418 seconds
        Minimum number of seconds to run all queries: 30.418 seconds
        Maximum number of seconds to run all queries: 30.418 seconds
        Number of clients running queries: 2
        Average number of queries per client: 5000
myisam每秒处理599次。

innodb每秒处理329次。

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

命令如下:

mysqlslap   --concurrency=2\
            --iterations=1\
            --number-int-cols=10\
            --number-char-cols=10\
            -a\
            --auto-generate-sql-add-autoincrement\
            --auto-generate-sql-secondary-indexes=2\
            --number-of-queries=10000\
            --auto-generate-sql-load-type=write\
            --engine=myisam,innodb\
结果如下:
Benchmark
        Running for engine myisam
        Average number of seconds to run all queries: 16.785 seconds
        Minimum number of seconds to run all queries: 16.785 seconds
        Maximum number of seconds to run all queries: 16.785 seconds
        Number of clients running queries: 2
        Average number of queries per client: 5000

Benchmark
        Running for engine innodb
        Average number of seconds to run all queries: 28.809 seconds
        Minimum number of seconds to run all queries: 28.809 seconds
        Maximum number of seconds to run all queries: 28.809 seconds
        Number of clients running queries: 2
        Average number of queries per client: 5000
myisam每秒处理595次。

innodb每秒处理347次。



读性能测试

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

读性能测试1,guid主键

命令如下:

mysqlslap   --concurrency=2\
            --iterations=1\
            --number-int-cols=10\
            --number-char-cols=10\
            -a\
            --auto-generate-sql-guid-primary\
            --auto-generate-sql-unique-query-number=10000\
            --auto-generate-sql-load-type=key\
            --number-of-queries=10000\
            --engine=myisam,innodb\
结果如下:
Benchmark
        Running for engine myisam
        Average number of seconds to run all queries: 4.215 seconds
        Minimum number of seconds to run all queries: 4.215 seconds
        Maximum number of seconds to run all queries: 4.215 seconds
        Number of clients running queries: 2
        Average number of queries per client: 5000

Benchmark
        Running for engine innodb
        Average number of seconds to run all queries: 3.917 seconds
        Minimum number of seconds to run all queries: 3.917 seconds
        Maximum number of seconds to run all queries: 3.917 seconds
        Number of clients running queries: 2
        Average number of queries per client: 5000
myisam每秒处理2372次

innodb每秒处理2553次

读性能测试2,auto increment主键

命令如下

mysqlslap   --concurrency=1\
            --iterations=1\
            --number-int-cols=10\
            --number-char-cols=10\
            -a\
            --auto-generate-sql-add-autoincrement\
            --auto-generate-sql-unique-query-number=10000\
            --auto-generate-sql-load-type=key\
            --number-of-queries=10000\
            --engine=myisam,innodb\
结果如下:
Benchmark
        Running for engine myisam
        Average number of seconds to run all queries: 4.555 seconds
        Minimum number of seconds to run all queries: 4.555 seconds
        Maximum number of seconds to run all queries: 4.555 seconds
        Number of clients running queries: 1
        Average number of queries per client: 10000

Benchmark
        Running for engine innodb
        Average number of seconds to run all queries: 4.402 seconds
        Minimum number of seconds to run all queries: 4.402 seconds
        Maximum number of seconds to run all queries: 4.402 seconds
        Number of clients running queries: 1
        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%), 读的速度差不多。


© 著作权归作者所有

上一篇: 品尝失败
下一篇: 我的2012
costaxu

costaxu

粉丝 145
博文 56
码字总数 86451
作品 0
深圳
程序员
私信 提问
加载中

评论(7)

lee_shaokang
lee_shaokang
请教个问题,执行测试加上--auto-generate-sql-guid-primary索引报错提示:ERROR : Data too long for column 'id' at row 1。lz这个错怎么解
l
leopoon
adobe
costaxu
costaxu 博主

引用来自“谦谦君子”的评论

请教lz一个问题,测出来的结果用auto-increment做主键和guid做主键貌似没有多大差别(我测试出来也是这样),可是我之前看到的guid做主键会比auto-increment做主键慢很多。不知道是怎么回事呢~~谢谢~~

我猜想可能的原因是guid是一个长字符串,auto-increment是一个整数。 长字符串在做索引的时候肯定需要比整数要消耗更多的时间。但在插入1W这么少量的数据的情况下, 这个劣势不足以表现的很明显。
只是猜测,有空时我再实验。
costaxu
costaxu 博主

引用来自“yinhongguang”的评论

如果上10W 以上的数据写入呢?

插入10W数据和插入1W数据性能上没有太大的区别。 插入更多的数据我没有试过,如果有兴趣你可以自己试一试吧。应该不会产生数量级的差异。
大象悟语
大象悟语
如果上10W 以上的数据写入呢?
谦谦君子
谦谦君子
请教lz一个问题,测出来的结果用auto-increment做主键和guid做主键貌似没有多大差别(我测试出来也是这样),可是我之前看到的guid做主键会比auto-increment做主键慢很多。不知道是怎么回事呢~~谢谢~~
SSmail
SSmail
excellent
如何对mysql集群进行性能测试?

现在已搭建起一个mysql集群环境,但是如何对该集群进行性能测试呢?现在使用mysqlslap工具测试出来的结果是:ndbcluster的读写效率均不如innodb,是不是针对mysql集群的性能测试不能简单地测...

mrZhan_223
2014/02/17
454
0
MySQL 5.6 VS 5.7压测报告

MySQL 5.6 VS 5.7压测报告 测试条件 1. 软件 OS: CentOS release 6.7 (Final) 文件格式:xfs MySQL:percona5.6.24 VS 5.7.10 关键参数配置(yum install后初始化默认,未做修改): bufferpo...

浮生凤年
2016/04/05
0
0
为什么数据库读写分离可以提高性能

虽然知道处理大数据量时,数据库要做读写分离,但是为什么读写分离可以提高性能呢? 下面是搜来的一些解释,看看再说! 一 什么是读写分离 MySQL Proxy最强大的一项功能是实现“读写分离(Re...

candies
2014/02/26
28.1K
2
阿里云原生数据库POLARDB压力测试报告

POLARDB介绍 POLARDB是阿里云ApsaraDB数据库团队研发的基于云计算架构的下一代关系型数据库,其最大的特色是计算节点(主要做SQL解析以及存储引擎计算的服务器)与存储节点(主要做数据块存储,...

桐碧2018
2018/07/25
0
0
maxscale配合MHA搭建读写分离的高可用架构(基于GTID replication主从架构,mysql5.6)

基于GTID的主从replication并配合MHA搭建高可用架构,请参考之前的博客:http://linzhijian.blog.51cto.com/1047212/1906434。这里只叙述如何在此基础上增加maxscale中间件,实现读写分离的功...

Jenkin_lin
2017/04/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

vue入门--简单路由配置

本文转载于:专业的前端网站➜vue入门--简单路由配置   在初始化vue init webpack <工程名>时,有一步是询问是否安装vue-router,选择yes,如果没有安装的话,后面需要自己安装。然后在目录...

前端老手
31分钟前
3
0
怎么给视频配音

很多刚开始尝试视频制作的小伙伴,帮助到怎么给制作完成的视频配音,其实给视频配音的方法非常简单,在手机上可以进行制作,下面一起来看看给视频配音的方法吧! 具体步骤如下: 1、首先在手...

白米稀饭2019
40分钟前
3
0
windows批处理bat脚本编写

什么是bat脚本 .bat结尾的文件其实就是windows上的批处理脚本,Windows中的bat文件相当于 Linux中shell编程的.sh脚本,批量执行DOS命令。 其最简单的例子,是逐行书写在命令行中会用到的各种...

孙幼凌
48分钟前
3
0
华为手机翻译功能怎么使用?这三种方法请务必收藏

华为手机翻译功能怎么使用?在我们的生活中会经常遇到翻译问题,许多外语不好的朋友该怎么办呢?华为手机已经为我们解决了这个问题,今天小编就教大家学会使用华为手机中的三种翻译技巧,需要...

翻译小天才
56分钟前
5
0
企业服务软件开发中需要注意的三个问题

在开发企业服务软件时,我们需要分为:业务需求、用户需求、产品需求,三大需求层次,三个层次互相关联,企业服务软件开发首先要服务业务,需要满足业务的需求,再关注用户体验,也就是用户需...

积木创意科技
58分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部