handlersocket mysql_[原创]MongoDB、HandlerSocket和MySQL性能测试及其结果分析
一、测试环境
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性能测试及其结果分析相关推荐
- mongodb存入mysql_关于mongodb转存MySQL
近期需要将Mongodb 的一些数据转存MySQL,之前只有BSON的数据包. 最初的思路,直接使用PHP的扩展bson_decode, 发现有两个比较棘手的问题, 一个是内存占用的问题,如果一个bs ...
- mysql handlersocket mongodb_MongoDB和MySQL HandlerSocket性能测试及其结果分析
一.测试环境 1.测试服务器状况 共涉及4台测试服务器: 压力测试服务器 Web服务器 MongoDB服务器 MySQL服务器. 机器配置为: CPU:Intel(R) Core(TM)2 Duo C ...
- 自定义字段MongoDb与Mysql 扩展表性能分析
1. 需求背景 对于saas应用来说,不同的租户对于表单有不同的定义,为了满足租户的千人千面,自定义表单字段就成为的必不可少的功能. 2. 技术方案 从传统数据库my ...
- MySQL 性能测试
MySQL 性能测试 MySQL 查询优化器有几个目标,但是其中最主要的目标是尽可能地使用索引,并且使用最严格的索引来消除尽可能多的数据行.最终目标是提交 SELECT 语句查找数据行,而不是排除数据 ...
- MySql性能测试工具-sysbench
转自:MySql性能测试工具-sysbench - 没那么简单的博客 虽然mysql默认的有mysqlslap这个性能测试工具,但和sysbench比较来说,还逊色不少. 下载安装包 https:// ...
- es 全量同步mysql_什么时候该用MySQL,什么时候该用ES呢?
作者:张sir 来源:京东技术 京东到家订单中心系统业务中,无论是外部商家的订单生产,或是内部上下游系统的依赖,订单查询的调用量都非常大,造成了订单数据读多写少的情况. 我们把订单数据存储在MySQL ...
- 分布式MySQL数据库TDSQL架构分析
分布式MySQL数据库TDSQL架构分析 发表于11小时前| 次阅读| 来源程序员电子刊| 0 条评论| 作者雷海林 MySQLTDSQL腾讯架构 width="22" he ...
- mysql如何建立索引workbench_如何对MySQL索引进行优化分析
为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及explain输出字段的意义.助你了解索引, ...
- MySQL简单查询性能分析
MySQL简单查询性能分析 建立如此结构的数据表,并插入110万条随机记录,进行查询性能测试. 插入110万条随机记录后,数据表的大小为102MB. 现在使用phpMyAdmin自带的SQL查询 ...
- Linux清mysql磁盘,mysql与linux ~ 磁盘分析与调优
一 简介 谈谈磁盘IO的问题二 目的:如何进行IO性能问题的排查 二 linux角度 一 机械硬盘基本定义 寻道时间,表示磁头在不同磁道之间移动的时间(最耗时). 旋转延迟,表示在磁道找到时,中轴带 ...
最新文章
- 百度2016笔试题第一题:页面请求失败值
- 分布式session之token解决方案实现
- Tabhost嵌套以及Tab中多个Activity跳转的实现
- mysql 简单优化规则
- 如何打包和部署air应用程序
- 存储过程没有执行完后没有释放锁_【大厂面试07期】说一说你对synchronized锁的理解?...
- 鸿蒙应用开发--事件
- 访问远程Visdom
- linux文件描述符有什么用,linux上的文件描述符3有什么特别之处?
- 退出整个Android程序的工具类
- selenium控制浏览器
- 代码开源许可证 区别 Apache MIT GPL
- python 线程池使用
- flowable工作流所有业务概念
- GBase8a数据库中表的comment信息
- Spire.pdf Pdf添加图片,无水印
- 图片转Excel表格在线工具,分享几款不错的工具!
- autojs自动添加QQ群成员好友脚本,QQ爆粉源码
- Web 面试之 HTTP和浏览器
- 拓扑容差如何修改_如何在CAD中通过设置容差参数对多段线进行自动修复重构
热门文章
- Ubuntu22.04运行网易云音乐错误
- ElasticSearch 多字段分组求和
- 决策树和CART决策树
- 穿越“宽带接入”的迷雾 :WAN接入关键技术详解(以及 cisco 路由器产品基础知识)...
- arm体系结构编程-入门介绍
- nrf24l01无线模块c语言程序,NRF24L01 无线通信模块使用
- 软件测试思维总结(1)-----比较思维:利用好可参照的资源
- 通达信股票软件日线数据分析
- 一键重装深度linux系统下载,Deepin 20 Beta X64官方正式版(64位)
- corpus iweb_智能网络语料库iWeb及其在英语教学中的应用