mysql性能测试及不同版本的比较
来源:互联网 发布:java 循环jsonarray 编辑:程序博客网 时间:2024/06/16 23:14
I. 引言
Oracle 公司发布了MySQL5.5版本,这也是该公司获得MySQL后,对MySQL的第一次升级。Oracle表示,按照内部的标准,在Linux 上,MySQL 5.5的读写速度比5.1版本提升了360%。在Windows Server机器上,这方面性能的提升超过了1500%。MySQL 5.5版本的吞吐量更高。如果真如Oracle所言,MySQL5.5相对于MySQL5.1在性能方面有全面的提升,我公司也会考虑将数据迁移至 MySQL5.5。为了证实MySQL5.5的性能,本人对MySQL5.1与MySQL5.5的常用功能的性能作了一次对比测试,测试根据MySQL引擎类型分两大部分:myisam和innodb。每一引擎的测试内容又分为三部分:
1、当连接数不断增加时,MySQL平均每秒处理事务(读写混合模式和只读模式)的能力。
2、当数据库表的行数不断增加时,MySQL平均每秒处理事务(读写混合模式和只读模式)的能力。
3、同样的数据,MySQL5.1和MySQL5.5文件所占的空间大小(此方案只测试引擎myisam,因为innodb的全部数据都存放在ibdata1中,所以没有办法作比较)。
我选用的测试工具是sysbench。SysBench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库 负载情况。从MySQL5.1开始,MySQL自带有测试工具mysqlslap,但我觉得该工具测试的内容有限,而且sysbench的OLTP基准测 试非常方便,所以最后还是选用了sysbench。Ubuntu用户可以apt方式安装(apt-get install sysbench)。sysbench的OLTP测试过程分三个阶段:prepare、run、cleanup。prepare主要是为测试新建所需要的 数据库及相关的表;run就是实际的测试执行过程;cleanup是在测试完毕后,清理测试中所产生的数据库表。具体内容可参考手册 http://sysbench.sourceforge.net/docs/
II. 实验方法
1、第一部分 Myisam
1.1、方案一
当数据库连接数不断增加时(从100~1000,每次递增200),MySQL平均每秒处理事务(读写混合模式和只读模式)的能力。该测试方案中, 表的大小不变,始终是100万行;表的类型是myisam;测试过程是否完成以处理的事务数来计算,即MySQL完成了10万次的事务数(读或写)后,测 试完成。
1.1.1、混合模式
测试OLTP混合模式的命令是:
sysbench –test=oltp –mysql-user=root –mysql-password=mysql51 –mysql-socket=/var/run/mysqld/mysqld.sock –oltp-table-size=1000000 –mysql-db=test –oltp-table-name=sbtest –max-requests=100000 –num-threads=100 –mysql-table-engine=myisam prepare/run/cleanup
命令解释:
–test=oltp
–mysql-password=mysql51 mysql密码
–oltp-table-size=1000000 表的行数
–mysql-db=test 数据库名
–oltp-table-name=sbtest 表名
–max-requests=100000 事务请求数
–num-threads=100 线程数
prepare/run/cleanup 命令需要执行三次,按阶段分别使用prepare、run、cleanup
其它的都比较好理解了
根据上面的数据,可得出如下曲线图:
说明:横轴为线程数,纵轴为每秒处理的事务数(读或写)
1.1.2、只读模式
测试OLTP只读模式的命令是:
sysbench –test=oltp –mysql-user=root –mysql-password=mysql51 –mysql-socket=/var/run/mysqld/mysqld.sock –oltp-table-size=1000000 –mysql-db=test –oltp-table-name=sbtest –max-requests=100000 –num-threads=100 –oltp-read-only=on –mysql-table-engine=myisam prepare/run/cleanup
分别测试MySQl5.1和MySQL5.5后,得到的数据如下:
根据上面的数据,可得出如下曲线图:
说明:横轴为线程数,纵轴为每秒处理的事务数(只读)
1.2、方案二
当数据库中表的行数不断增加时(从50万~1000万,每次递增50万行),MySQL平均每秒处理事务(读写混合模式和只读模式)的能力。该测试 方案中,表的连接数始终为100;表的类型是myisam;测试过程是否完成以时间来计算,即测试时间到达5分钟时,测试结束.
1.2.1、混合模式
测试OLTP混合模式的命令是:
sysbench –test=oltp –mysql-user=root –mysql-password=123456 –mysql-socket=/tmp/mysql.sock –mysql-db=test –oltp-table-name=sbtest –max-requests=0 –num-threads=100 –mysql-table-engine=myisam –max-time=300 –myisam-max-rows=50000000 –oltp-table-size=N prepare/run/cleanup
命令解释:
–max-requests=0
–myisam-max-rows=50000000
–oltp-table-size=N N即是50万~1000万
分别测试MySQl5.1和MySQL5.5后,得到的数据如下:
根据上面的数据,可得出如下曲线图:
说明:横轴为线程数,纵轴为每秒处理的事务数(读或写)
1.2.2、只读模式
测试OLTP只读模式的命令:
sysbench –test=oltp –mysql-user=root –mysql-password=123456 –mysql-socket=/tmp/mysql.sock –mysql-db=test –oltp-table-name=sbtest –max-requests=0 –num-threads=100 –mysql-table-engine=myisam –max-time=300 –myisam-max-rows=50000000 –oltp-read-only=on –oltp-table-size=N prepare/run/cleanup
分别测试MySQl5.1和MySQL5.5后,得到的数据如下:
根据上面的数据,可得出如下曲线图
说明:横轴为线程数,纵轴为每秒处理的事务数(只读)
1.3、方案三
在MySQL5.1和MySQL5.5中,分别用sysbench新建同样的表,对比表文件.MYD的大小.
分别测试MySQl5.1和MySQL5.5后,得到的数据如下
根据上面的数据,可得出如下曲线图:
2、第二部分 Innodb
2.1、方案一
当数据库连接数不断增加时(从100~1000,每次递增200),MySQL平均每秒处理事务(读写混合模式和只读模式)的能力。该测试方案中, 表的大小不变,始终是100万行;表的类型是innodb;测试过程是否完成以处理的事务数来计算,即MySQL完成了2万次的事务数(读或写)后,测试 完成。
2.1.1、混合模式
测试OLTP混合模式的命令是:
sysbench –test=oltp –mysql-user=root –mysql-password=mysql51 –mysql-socket=/var/run/mysqld/mysqld.sock –oltp-table-size=1000000 –mysql-db=test –oltp-table-name=sbtest –max-requests=20000 –num-threads=100 –mysql-table-engine=innodb prepare/run/cleanup
分别测试MySQl5.1和MySQL5.5后,得到的数据如下:
根据上面的数据,可得出如下曲线图:
说明:横轴为线程数,纵轴为每秒处理的事务数(读或写)
2.1.2、只读模式
测试OLTP只读模式的命令是:
sysbench –test=oltp –mysql-user=root –mysql-password=mysql51 –mysql-socket=/var/run/mysqld/mysqld.sock –oltp-table-size=1000000 –mysql-db=test –oltp-table-name=sbtest –max-requests=20000 –oltp-read-only=on –num-threads=100 –mysql-table-engine=innodb prepare/run/cleanup
分别测试MySQl5.1和MySQL5.5后,得到的数据如下:
说明:横轴为线程数,纵轴为每秒处理的事务数(只读)
2.2、方案二
当数据库中表的行数不断增加时(从50万~1000万,每次递增50万行),MySQL平均每秒处理事务(读写混合模式和只读模式)的能力。该测试 方案中,表的连接数始终为100;表的类型是innodb;测试过程是否完成以时间来计算,即测试时间到达5分钟时,测试结束.
2.2.1、混合模式
测试OLTP混合模式的命令是:
sysbench –test=oltp –mysql-user=root –mysql-password=mysql51 –mysql-socket=/var/run/mysqld/mysqld.sock –mysql-db=test –oltp-table-name=sbtest –max-requests=0 –num-threads=100 –mysql-table-engine=innodb –max-time=300 –oltp-table-size=N prepare/run/cleanup
分别测试MySQl5.1和MySQL5.5后,得到的数据如下:
根据上面的数据,可得出如下曲线图:
说明:横轴为线程数,纵轴为每秒处理的事务数(读或写)
2.2.2、只读模式
测试OLTP只读模式的命令:
sysbench –test=oltp –mysql-user=root –mysql-password=mysql51 –mysql-socket=/var/run/mysqld/mysqld.sock –mysql-db=test –oltp-table-name=sbtest –max-requests=0 –num-threads=100 –mysql-table-engine=innodb –max-time=300 –oltp-read-only=on –oltp-table-size=N prepare/run/cleanup
分别测试MySQl5.1和MySQL5.5后,得到的数据如下:
根据上面的数据,可得出如下曲线图:
说明:横轴为线程数,纵轴为每秒处理的事务数(读或写)
III. 结果
在关于引擎myisam的测试中,当连接数不断增加时,MySQL5.5的读写性能较MySQL5.1提升了25%~70%;当测试数据表的行数逐 渐增加时,MySQL5.5较MySQL5.1的读写性能提升非常明显,在OLTP混合模式中,最高提升了309%,而在OLTP只读模式中,提升了 46.5%~1761%。
在关于引擎innodb的测试中,当连接数不断增加时,OLTP混合模式MySQL5.5读写性能提升了49%~165%,OLTP只读模式提升了0~86.3%;当测试数据表的行数逐渐增加时,MySQL5.5的读写性能提升了57%~80%。
IV. 总结
对于Oracle声称MySQL5.5较MySQL5.1在读写性能上提升了360%,我的测试数据中,只有在引擎myisam的只读模式下,确实 达到了甚至超过了360%;但在其它情况下测试,均没有达到360%的提升率。但根据测试结果可以发现,MySQL5.5较MySQL5.1在读写性能上 确实都有较大提升。可以考虑在进一步熟悉及测试MySQL5.5后逐步升级当前MySQL版本为MySQL5.5。
V. 讨论
浅谈MySQL存储引擎选择 InnoDB还是MyISAM
如果你需要事务处理或是外键,那么InnoDB 可能是比较好的方式。如果你需要全文索引,那么通常来说 MyISAM是好的选择,因为这是系统内建的,然而,我们其实并不会经常地去测试两百万行记录。所以,就算是慢一点,我们可以通过使用Sphinx从 InnoDB中获得全文索引。
数据的大小,是一个影响你选择什么样存储引擎的重要因素,大尺寸的数据集趋向于选择InnoDB方式,因为其支持事务处理和故障恢复。数据库的 在小决定了故障恢复的时间长短,InnoDB可以利用事务日志进行数据恢复,这会比较快。而MyISAM可能会需要几个小时甚至几天来干这些 事,InnoDB只需要几分钟。
您操作数据库表的习惯可能也会是一个对性能影响很大的因素。比如: COUNT() 在 MyISAM 表中会非常快,而在InnoDB 表下可能会很痛苦。而主键查询则在InnoDB下会相当相当的快,但需要小心的是如果我们的主键太长了也会导致性能问题。大批的inserts 语句在MyISAM下会快一些,但是updates 在InnoDB 下会更快一些——尤其在并发量大的时候。
所以,到底你检使用哪一个呢?根据经验来看,如果是一些小型的应用或项目,那么MyISAM 也许会更适合。当然,在大型的环境下使用MyISAM 也会有很大成功的时候,但却不总是这样的。如果你正在计划使用一个超大数据量的项目,而且需要事务处理或外键支持,那么你真的应该直接使用InnoDB方 式。但需要记住InnoDB 的表需要更多的内存和存储,转换100GB 的MyISAM 表到InnoDB 表可能会让你有非常坏的体验
- mysql性能测试及不同版本的比较
- mysql性能测试及不同版本的比较
- mysql性能测试及不同版本的比较
- mysql性能测试及不同版本的比较(转)
- MySQL不同版本间的性能比较
- 不同版本的SQL Server之间数据导出导入的方法及性能比较
- 不同版本的SQL Server之间数据导出导入的方法及性能比较
- PHP不同版本性能测试
- 西门子PLC200不同版本的串口性能比较
- 西门子PLC200不同版本的串口性能比较
- 西门子PLC200不同版本的串口性能比较
- MySQL性能比较测试(转)
- 不同阶段的性能测试
- lucene不同版本的差别与比较
- SharePoint: 如何比较文档的不同版本
- Git diff 比较不同版本的差异
- 不同型号处理器的性能比较
- 不同型号处理器的性能比较
- java常见的几种内存溢出和解决方案
- Android开发安装项目控制台报 INSTALL_FAILED_INSUFFICIENT_STORAGE
- 网络抓包工具
- mysql读写性能测试
- Java的四种引用类型
- mysql性能测试及不同版本的比较
- OC中删除字符串中相邻重复字符
- 【贪心】[NOIP模拟赛]奇怪的队列
- 什么方法将txt转换pdf最有效
- 既然有了elasticsearch为什么还要用hadoop和spark呢?good question
- linux sort 命令
- web.xml中的contextConfigLocation在spring中的作用
- R语言实例-数据过滤
- Log4j学习笔记