一、测试环境

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万以上。

转载请注明出处,谢谢!

handlersocket mysql_[原创]MongoDB、HandlerSocket和MySQL性能测试及其结果分析相关推荐

  1. mongodb存入mysql_关于mongodb转存MySQL

    近期需要将Mongodb 的一些数据转存MySQL,之前只有BSON的数据包. 最初的思路,直接使用PHP的扩展bson_decode, 发现有两个比较棘手的问题, 一个是内存占用的问题,如果一个bs ...

  2. mysql handlersocket mongodb_MongoDB和MySQL HandlerSocket性能测试及其结果分析

    一.测试环境 1.测试服务器状况 共涉及4台测试服务器: 压力测试服务器 Web服务器 MongoDB服务器 MySQL服务器. 机器配置为: CPU:Intel(R) Core(TM)2 Duo C ...

  3. 自定义字段MongoDb与Mysql 扩展表性能分析

    1.  需求背景         对于saas应用来说,不同的租户对于表单有不同的定义,为了满足租户的千人千面,自定义表单字段就成为的必不可少的功能. 2. 技术方案         从传统数据库my ...

  4. MySQL 性能测试

    MySQL 性能测试 MySQL 查询优化器有几个目标,但是其中最主要的目标是尽可能地使用索引,并且使用最严格的索引来消除尽可能多的数据行.最终目标是提交 SELECT 语句查找数据行,而不是排除数据 ...

  5. MySql性能测试工具-sysbench

    转自:MySql性能测试工具-sysbench - 没那么简单的博客 虽然mysql默认的有mysqlslap这个性能测试工具,但和sysbench比较来说,还逊色不少. 下载安装包 https:// ...

  6. es 全量同步mysql_什么时候该用MySQL,什么时候该用ES呢?

    作者:张sir 来源:京东技术 京东到家订单中心系统业务中,无论是外部商家的订单生产,或是内部上下游系统的依赖,订单查询的调用量都非常大,造成了订单数据读多写少的情况. 我们把订单数据存储在MySQL ...

  7. 分布式MySQL数据库TDSQL架构分析

     分布式MySQL数据库TDSQL架构分析 发表于11小时前| 次阅读| 来源程序员电子刊| 0 条评论| 作者雷海林 MySQLTDSQL腾讯架构 width="22" he ...

  8. mysql如何建立索引workbench_如何对MySQL索引进行优化分析

    为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及explain输出字段的意义.助你了解索引, ...

  9. MySQL简单查询性能分析

    MySQL简单查询性能分析  建立如此结构的数据表,并插入110万条随机记录,进行查询性能测试.   插入110万条随机记录后,数据表的大小为102MB. 现在使用phpMyAdmin自带的SQL查询 ...

  10. Linux清mysql磁盘,mysql与linux ~ 磁盘分析与调优

    一 简介 谈谈磁盘IO的问题二 目的:如何进行IO性能问题的排查 二  linux角度 一 机械硬盘基本定义 寻道时间,表示磁头在不同磁道之间移动的时间(最耗时). 旋转延迟,表示在磁道找到时,中轴带 ...

最新文章

  1. 百度2016笔试题第一题:页面请求失败值
  2. 分布式session之token解决方案实现
  3. Tabhost嵌套以及Tab中多个Activity跳转的实现
  4. mysql 简单优化规则
  5. 如何打包和部署air应用程序
  6. 存储过程没有执行完后没有释放锁_【大厂面试07期】说一说你对synchronized锁的理解?...
  7. 鸿蒙应用开发--事件
  8. 访问远程Visdom
  9. linux文件描述符有什么用,linux上的文件描述符3有什么特别之处?
  10. 退出整个Android程序的工具类
  11. selenium控制浏览器
  12. 代码开源许可证 区别 Apache MIT GPL
  13. python 线程池使用
  14. flowable工作流所有业务概念
  15. GBase8a数据库中表的comment信息
  16. Spire.pdf Pdf添加图片,无水印
  17. 图片转Excel表格在线工具,分享几款不错的工具!
  18. autojs自动添加QQ群成员好友脚本,QQ爆粉源码
  19. Web 面试之 HTTP和浏览器
  20. 拓扑容差如何修改_如何在CAD中通过设置容差参数对多段线进行自动修复重构

热门文章

  1. Ubuntu22.04运行网易云音乐错误
  2. ElasticSearch 多字段分组求和
  3. 决策树和CART决策树
  4. 穿越“宽带接入”的迷雾 :WAN接入关键技术详解(以及 cisco 路由器产品基础知识)...
  5. arm体系结构编程-入门介绍
  6. nrf24l01无线模块c语言程序,NRF24L01 无线通信模块使用
  7. 软件测试思维总结(1)-----比较思维:利用好可参照的资源
  8. 通达信股票软件日线数据分析
  9. 一键重装深度linux系统下载,Deepin 20 Beta X64官方正式版(64位)
  10. corpus iweb_智能网络语料库iWeb及其在英语教学中的应用