MongoDB和MySQL性能测试及其结果分析

转载 2016年08月29日 18:28:29

MongoDB和MySQL性能测试及其结果分析

2011-02-23 11:18 洪小军 博客园 字号:T | T
一键收藏,随时查看,分享好友!

编者用四组数据的查询和插入操作说明MongoDB、HandlerSocket和MySQL在QPS、CPU、IO三种情况下性能的差异。

AD:51CTO 网+ 第十二期沙龙:大话数据之美_如何用数据驱动用户体验

一、测试环境

1、测试服务器状况

共涉及4台测试服务器:

压力测试服务器

Web服务器

MongoDB服务器

MySQL服务器。

机器配置为:

CPU:Intel(R) Core(TM)2 Duo CPU E7200 @ 2.53GHz

RAM:8G DDR2 667

磁盘:SATA

操作系统:

Redhat 5.5

1. 压力测试服务器

安装Webbench 1.5,通过Webbench来压Web服务器。

2. Web服务器

Nginx 0.8.54 + PHP 5.3.3 (php-fpm),安装有Mongodb和HandlerSocket的php驱动。

Mongodb的php驱动为:mongodb-mongo-php-driver-1.1.1-19-gc584231.tar.gz

HandlerSocket的php驱动为:php-handlersocket-0.0.7.tar.gz

通过Php程序来调用Mongodb和HandlerSocket。

3. MongoDB服务器

MongoDB版本:1.6.5

4. MySQL服务器

MySQL版本:5.1.53

HandlerSocket版本:1.0.6-60-gf51e061

MySQL存储引擎:Innodb,调整了innodb的Thread Pool Size为2G

2、测试程序和测试数据提取

1. 为了避免打开连接和Http服务器成为瓶颈,在测试程序里设置为每1000个请求公用同一个连接,同时设置为每个页面请求执行1000次数据请求。

2. 测试的数据,包括QPS、CPU、IO等方面的数据,从操作系统提供的命令(如vmstat、iostat等)或者Mongodb、Mysql提供的命令(如mongostat、mysqladmin等)来获取。

二、测试结果

1、100万条记录

1. 查询

2. 插入

2、1000万条记录

1. 查询

2. 插入

3、2000万条记录

1. 查询

2. 插入

4、5000万条记录

1. 查询

2. 插入

三、测试分析总结

1、 I/O读写情况

从插入情况下的TPS数据可以看出, MySQL、HandlerSocket和Mongodb的数据有比较明显的差别,这主要跟他们的内部实现和测试方式有关系。

测试场景下MySQL采用的是单条Insert的方式,所以可以看出QPS数和TPS数是基本一致的,也就是每个Insert操作,都对应有一次I/O写入操作。可以从MySQL数据库本身做一些优化,这次测试没有覆盖到这种场景。

HandlerSocket内部采用的是Bulk Insert操作,所以,可以看出QPS数明显大于TPS数,批量的插入操作明显提高了整体性能。

Mongodb内部采用合并操作的方式,采用数据先存放到内存中,然后再Flush到磁盘上的方式。所以,从测试数据可以看出,TPS曲线坡度非常大:有时候TPS是零,这时候是还放到内存中,还没有Flush到磁盘上;有时候TPS非常高,同时这时候CPU也非常高,几乎是100%,这时候是在做Flush到磁盘的操作。基于此种机制,以后会再做一些更细化的优化和测试,因为这样有可能会存在几种问题:

第一, 可能会导致某个时间段IO和CPU的压力非常大,甚至达到峰值,这种情况下,服务的整体健康状态将面临着一些挑战。

第二, 如果服务器重启,可能会出现数据丢失的情况,内存中的数据还没有Flush到磁盘的会丢失。当然这种情况是两面性的,因为采用这种方式,从测试结果也可以看出,整体的写入性能比MySQL和HandlerSocket都高,这是一种取舍,就看具体业务是否可以接受这样的以高性能换取数据可靠性,有些业务可能是可以接受的,比如Feed。

2、 CPU占用情况

从查询情况下的CPU数据可以看出,MySQL和Mongodb几乎都接近100%,而HandlerSocket由于省去了各种Sql Parser和相关的操作,CPU占用率保持在40%-60%之间,在一个比较合理的范围内。

从插入情况下的CPU数据可以看出,HandlerSocket的CPU占用率还是保持在40%-60%之间,低于MySQL和Mongodb。MySQL和Mongodb大部分情况保持在50%-90%之间。

3、 QPS情况

从查询情况下的QPS数据可以看出,HandlerSocket和Mongodb的查询性能几乎差不多,都达到3万以上,并且随着数据量的增长,性能没有回落,还是保持在3万以上。目前只是最大测试到5000万数据的情况,更高的数值这次测试还没有覆盖到。而MySQL的性能相比之下则差一些,一般在18000到25000之间。当然这次没有太多的针对MySQL做优化,只是增大了innodb_thread_pool大小和每次分配的数据块的大小,如果针对MySQL做优化,可能能同时提高HandlerSocket和MySQL的性能。

从插入情况下的QPS数据可以看出,Mongodb明显占有比较大的优势,这根之前说的它的实现方式有关。随着数据量的增长,QPS都相应的在减少,这方面,MySQL的幅度最大,数据量到达5000万以上时,MySQL的插入性能为2000-3000,而HandlerSocket能保持在1万以上,Mongodb为2万以上。

出处:http://www.cnblogs.com/inrie

【编辑推荐】

  1. MySQL 5.5.5 M3发布 改进InnoDB存储引擎
  2. 从MySQL 5.5发布看开源数据库版本升级新模式
  3. MySQL 5.5发布 支持半同步复制
  4. MySQL 5.5更新频繁 InnoDB重大改进
  5. 深入了解MySQL 5.5分区功能增强

MongoDB 与 MySQL 性能测试分析

1、 I/O读写情况从插入情况下的TPS数据可以看出, MySQL、HandlerSocket和Mongodb的数据有比较明显的差别,这主要跟他们的内部实现和测试方式有关系。测试场景下MySQL采用的...
  • HeatDeath
  • HeatDeath
  • 2017年06月01日 15:34
  • 741

MongoDB和MySQL性能测试及其结果分…

一、测试环境   1、测试服务器状况   共涉及4台测试服务器:   压力测试服务器   Web服务器   MongoDB服务器   MySQL服务器  。      机器配置为: ...
  • phpero
  • phpero
  • 2013年04月28日 11:11
  • 263

MongoDB和MySQL性能测试及其结果分析2010

编者用四组数据的查询和插入操作说明MongoDB、HandlerSocket和MySQL在QPS、CPU、IO三种情况下性能的差异。   AD:   一、测试环境   1、测试服务器...
  • joeyon
  • joeyon
  • 2015年07月23日 10:24
  • 390

MongoDB与MySQL的插入、查询性能测试

1. 背景介绍 1.1  MongoDB的简单介绍 在当今的数据库市场上,MySQL无疑是占有一席之地的。作为一个开源的关系型数据库,MySQL被大量应用在各大网站后台中,承担着信息存储的重要作用...
  • clh604
  • clh604
  • 2014年02月21日 10:26
  • 45931

MongoDB 3.2版WiredTiger存储引擎性能测试

MongoDB 3.2版WiredTiger存储引擎性能测试作者:chszs,未经博主允许不得转载。经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszsMongoDB...
  • chszs
  • chszs
  • 2015年12月19日 16:11
  • 7141

MongoDB和HBase的性能分析测试对比

性能测试:SequoiaDB vs. MongoDB vs. Cassandra vs. HBase 在本篇测试报告中,我们使用Yahoo!发布的标准YCSB测试规则,对MongoDB、...
  • English0523
  • English0523
  • 2015年04月11日 14:26
  • 4877

有关性能测试结果的几点分析原则

性能测试结果的分析原则:   具体问题具体分析(这是由于不同的应用系统,不同的测试目的,不同的性能关注点)   查找瓶颈时按以下顺序,由易到难。   服务器硬件瓶颈-〉网络瓶颈(对局域网,可以不...
  • yuner_123
  • yuner_123
  • 2016年04月14日 17:52
  • 937

Loadrunner性能测试结果进行分析

上有一篇讲解了性能的重要指标代表什么,下面对LoadRunner性能测试结果分析思路做一下介绍: 性能测试结果分析思路: 1.      关注Transaction Summary...
  • baby_sweet
  • baby_sweet
  • 2016年04月27日 16:36
  • 3515

MongoDB与MySQL的插入性能测试

1.1  MongoDB的简单介绍 在当今的数据库市场上,MySQL无疑是占有一席之地的。作为一个开源的关系型数据库,MySQL被大量应用在各大网站后台中,承担着信息存储的重要作用。2009年,甲骨...
  • chenhuajie123
  • chenhuajie123
  • 2013年07月14日 22:00
  • 16076

【MongoDb】一次关于Oracle和MongoDb的插入和查询性能测试

本次实验是在笔者上学期期末一次课程实习中的一部分,现在整理出来以供参考。本次数据用的是不同数量级别上的数据分别在Oracle和MongoDb中进行实验的。 其中两者的表结构一样,都是如下字段: 得...
  • wk1134314305
  • wk1134314305
  • 2017年07月31日 14:36
  • 324
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MongoDB和MySQL性能测试及其结果分析
举报原因:
原因补充:

(最多只允许输入30个字)