侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

1亿条记录的MongoDB数据库随机查询性能测试

数据库  /  管理员 发布于 6年前   342

mongdb性能压力测试,随机查询,数据量1亿条记录

操作系统centos6.4x64位

从测试结果看,当mongodb将数据全部载入到内存后,查询速度根据文档的大小,性能瓶颈通常会是在网络流量和CPU的处理性能(该次测试中当数据全部在内存后,纯粹的查询速度可以稳定在10W/S左右,系统load可以维持在1以下,由于此时CPU已经被使用到极限了,当并发再大时load值会直线飙升,性能急剧下降)。

压力生成服务器与Mongodb服务器基本配置

cpu型号:Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz

内存:64G

硬盘:10K转速 6块做RAID0,raid卡cache 1G(磁盘的IO性能决定MONGODB将非热点数据载入到内存的速度,当热点数据全部在内存后,IO性能可以忽略)

网卡速度:接入千兆交互机,速度1000MB

数据结构,user_id为索引键值为0-99999999,数据总大小约37G左右,全部载入内存后约32G

> db.thing.findOne();

{

        "_id" : ObjectId("51fd6830c6db9d15676f89ef"),

        "ip" : "192.168.168.254",

        "g_roup" : "kiwi",

        "mac" : "of:fd:67:8c:2f:8f",

        "address" : "hongmei1801num",

        "user_id" : 10000000,

        "name" : "user10000000",

        "title" : "system",

        "database" : "mongodb",

        "telphone" : NumberLong("15718441234"),

        "mail" : "[email protected]",

        "os" : "win7",

        "company" : "chinapnr"

}

压力生成脚本开启40个进程,并发随机查询

[root@mdb-166 app]# cat mselectmongodb.py 

import time,pymongo,multiprocessing,random,string 

class SqlToMongo:

    def m_sql(self,x,y):

        server="mongodb://python:[email protected]:27017/syslog"

        conn=pymongo.Connection(server)

        db=conn.syslog

        col=db.thing

        start=x*y

        end=start+x

        for i in xrange(start,end):

            d=random.randint(start,end)

            val=col.find({"user_id":d})

            a=list(val)

def gen_load(x,taskid):

    task=SqlToMongo()

    print "task %s start!" % taskid

    task.m_sql(x,taskid)

if __name__ == "__main__": 

        inser_number=2500000

        pro_pool = multiprocessing.Pool(processes=101)

        print time.strftime('%Y-%m-%d:%H-%M-%S',time.localtime(time.time()))

        start_time=time.time()

        manager = multiprocessing.Manager()

        for i in xrange(40):

                taskid=i  

                pro_pool.apply_async(gen_load,args=(inser_number,taskid)) 

        pro_pool.close()

        pro_pool.join()

        elapsed = time.time()-start_time

        print elapsed

        time.sleep(1)

        print "Sub-process(es) done." 

压力生成服务器负载,同时开启80个并发时抗不住了

top - 17:12:59 up 2 days,  7:34,  4 users,  load average: 35.87, 29.41, 18.16

Tasks: 487 total,  64 running, 423 sleeping,   0 stopped,   0 zombie

Cpu0  : 88.1%us, 10.6%sy,  0.0%ni,  1.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu1  : 87.7%us, 10.9%sy,  0.0%ni,  1.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu2  : 87.7%us, 11.0%sy,  0.0%ni,  1.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu3  : 88.0%us, 10.3%sy,  0.0%ni,  1.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu4  : 87.7%us, 11.0%sy,  0.0%ni,  1.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu5  : 88.7%us,  9.9%sy,  0.0%ni,  1.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu6  : 40.2%us,  3.3%sy,  0.0%ni,  0.3%id,  0.0%wa,  0.0%hi, 56.1%si,  0.0%st

Cpu7  : 89.7%us,  8.9%sy,  0.0%ni,  1.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu8  : 88.1%us, 10.6%sy,  0.0%ni,  1.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu9  : 89.7%us,  9.3%sy,  0.0%ni,  1.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu10 : 88.7%us,  9.9%sy,  0.0%ni,  1.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu11 : 88.4%us, 10.2%sy,  0.0%ni,  1.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Mem:  65909128k total,  5409148k used, 60499980k free,    90680k buffers

Swap:  8388600k total,        0k used,  8388600k free,  4392420k cached

   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                        

 13342 root      20   0  178m 9056 1480 R 15.9  0.0   5:15.79 python mselectmongodb.py                                                                       

 13430 root      20   0  178m 8976 1468 R 15.9  0.0   3:05.26 python mselectmongodb.py                                                                       

 13321 root      20   0  178m 9000 1464 R 15.6  0.0   5:17.26 python mselectmongodb.py                                                                       

........                                                           

 13311 root      20   0  178m 8980 1464 R 14.9  0.0   5:21.70 python mselectmongodb.py         

系统负载,

[root@mdb-167 ~]# top

并发进程80的系统负载

[root@mdb-167 ~]# top

top - 17:08:33 up  4:49,  5 users,  load average: 0.00, 0.00, 1.05

Tasks: 287 total,   2 running, 285 sleeping,   0 stopped,   0 zombie

Cpu0  : 60.1%us, 31.4%sy,  0.0%ni,  8.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu1  : 57.8%us, 33.0%sy,  0.0%ni,  9.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu2  : 58.4%us, 31.4%sy,  0.0%ni, 10.1%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu3  : 54.8%us, 33.9%sy,  0.0%ni, 11.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu4  : 55.8%us, 31.8%sy,  0.0%ni, 12.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu5  : 53.4%us, 32.9%sy,  0.0%ni, 13.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu6  : 31.4%us, 12.7%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi, 55.9%si,  0.0%st

Cpu7  : 61.0%us, 31.7%sy,  0.0%ni,  7.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu8  : 59.7%us, 32.3%sy,  0.0%ni,  8.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu9  : 59.0%us, 32.4%sy,  0.0%ni,  8.6%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu10 : 59.4%us, 31.4%sy,  0.0%ni,  9.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu11 : 57.8%us, 32.1%sy,  0.0%ni, 10.1%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Mem:  65909128k total, 34281160k used, 31627968k free,    50416k buffers

Swap:  8388600k total,        0k used,  8388600k free, 33502796k cached

   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                        

  2924 mdb       20   0 80.7g  31g  31g S 1092.6 50.7 458:42.39 /app/mongodb/bin/mongod -f /app/mongodb/etc/mdb.conf                                         

  1967 root      20   0     0    0    0 S  0.3  0.0   0:05.40 [kondemand/6]                                                                                  

  1996 root      20   0 10964  720  432 S  0.3  0.0   0:05.12 irqbalance                                                                                     

  3045 mdb       20   0 84500  38m 7076 S  0.3  0.1   0:01.99 mongostat -h 127.0.0.1 --port 27017 -u root -p xxxxx            

mongstat监控 

insert  query update delete getmore command flushes mapped  vsize    res faults    locked db idx miss %     qr|qw   ar|aw  netIn netOut  conn       time 

    *0  92408     *0     *0       0     1|0       0  40.1g  80.7g  31.9g      0  syslog:0.0%          0       0|0    20|0     5m    28m    82   17:08:32 

    *0  92827     *0     *0       0     3|0       0  40.1g  80.7g  31.9g      0  syslog:0.0%          0       0|0    19|0     5m    28m    82   17:08:33 

.......

    *0  93717     *0     *0       0     1|0       0  40.1g  80.7g  31.9g      0  syslog:0.0%          0       0|0    25|0     5m    28m    82   17:08:38 

    *0  92193     *0     *0       0     3|0       0  40.1g  80.7g  31.9g      0  syslog:0.1%          0       1|0    11|0     5m    28m    82   17:08:39 

    *0  92250     *0     *0       0     1|0       0  40.1g  80.7g  31.9g      0  syslog:0.0%          0       0|0    25|0     5m    28m    82   17:08:40 

    *0  93790     *0     *0       0     3|0       0  40.1g  80.7g  31.9g      0  syslog:0.0%          0       1|0    16|0     5m    28m    82   17:08:41 

网络流量

[root@mdb-167 app]# ./check_netflow.py -l 1 -i p1p1 -t 1

IN 1 seconds network transmit and receive average(KB)

transmit=34101,receive=11370

transmit=34354,receive=11452

.....

transmit=33957,receive=11322

transmit=34045,receive=11353

transmit=34244,receive=11416

磁盘IO

[root@mdb-167 ~]# tail -f mselectmongodb 

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util

sda               0.00     7.00    0.00    4.00     0.00    48.00    24.00     0.00    0.00   0.00   0.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util

sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

.....

sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util

sda               0.00     7.00    0.00    5.00     0.00    48.00    19.20     0.00    0.00   0.00   0.00  

二、并发进程达到120的时候系统负载(由于CPU的处理能力,系统已经无法承受)

top - 16:57:57 up  3:47,  5 users,  load average: 58.18, 30.82, 16.40

Tasks: 288 total,   1 running, 287 sleeping,   0 stopped,   0 zombie

Cpu0  : 59.6%us, 40.2%sy,  0.0%ni,  0.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu1  : 59.3%us, 40.5%sy,  0.0%ni,  0.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu2  : 59.0%us, 40.8%sy,  0.0%ni,  0.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu3  : 58.7%us, 41.0%sy,  0.0%ni,  0.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu4  : 58.8%us, 40.9%sy,  0.0%ni,  0.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu5  : 58.8%us, 40.9%sy,  0.0%ni,  0.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu6  : 27.2%us, 13.1%sy,  0.0%ni,  0.1%id,  0.0%wa,  0.0%hi, 59.6%si,  0.0%st

Cpu7  : 60.5%us, 39.3%sy,  0.0%ni,  0.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu8  : 60.2%us, 39.5%sy,  0.0%ni,  0.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu9  : 59.8%us, 39.9%sy,  0.0%ni,  0.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu10 : 59.5%us, 40.2%sy,  0.0%ni,  0.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu11 : 59.4%us, 40.4%sy,  0.0%ni,  0.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Mem:  65909128k total, 34278248k used, 31630880k free,    45652k buffers

Swap:  8388600k total,        0k used,  8388600k free, 33501056k cached

   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                        

  2924 mdb       20   0 80.7g  31g  31g S 1193.2 50.4 165:06.51 /app/mongodb/bin/mongod -f /app/mongodb/etc/mdb.conf     

mongstat监控

insert  query update delete getmore command flushes mapped  vsize    res faults    locked db idx miss %     qr|qw   ar|aw  netIn netOut  conn       time 

    *0 103334     *0     *0       0     1|0       0  40.1g  80.7g  31.7g      0  syslog:0.1%          0       0|0    56|0     6m    31m   122   16:55:19 

    *0 103299     *0     *0       0     3|0       0  40.1g  80.7g  31.7g      0  syslog:0.0%          0       0|0    55|0     6m    31m   122   16:55:20 

......

    *0 102858     *0     *0       0     3|0       0  40.1g  80.7g  31.7g      0  syslog:0.0%          0       0|0    66|0     6m    31m   122   16:55:26 

    *0 103201     *0     *0       0     1|0       0  40.1g  80.7g  31.7g      0  syslog:0.0%          0       0|0    60|0     6m    31m   122   16:55:27 

    *0 102381     *0     *0       0     3|0       0  40.1g  80.7g  31.7g      0  syslog:0.1%          0       1|0    89|0     6m    31m   122   16:55:28 

磁盘IO

[root@mdb-167 ~]# tail -f mselectmongodb 

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util

sda               0.00     7.00    0.00    4.00     0.00    48.00    24.00     0.00    0.00   0.00   0.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util

.....

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util

sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util

sda               0.00     7.00    0.00    5.00     0.00    48.00    19.20     0.00    0.00   0.00   0.00  

网络流量

transmit=37567,receive=12525

......

transmit=37691,receive=12568

transmit=37592,receive=12534

transmit=37480,receive=12498

以下是mongodb从测试开始时的查询速度变化过程,当数据逐步载入内存后,查询速度也在逐步提高,大约会花费了20分钟将所有数据载入到了内存。

[mdb@mdb-167 ~]$ more  mselectmongodb 

connected to: 127.0.0.1:27017

insert  query update delete getmore command flushes mapped  vsize    res faults   locked db idx miss %     qr|qw   ar|aw  netIn netOut  conn       time 

    *0    679     *0     *0       0     1|0       0  40.1g  80.6g   494m    671 syslog:1.0%          0       0|0     0|0    40k   213k    42   16:37:16 

    *0    562     *0     *0       0     3|0       0  40.1g  80.6g   500m    625 syslog:0.9%          0      36|0     2|0    33k   176k    42   16:37:17 

..........

    *0    626     *0     *0       0     1|0       0  40.1g  80.6g   550m    667 syslog:1.0%          0      36|0     1|0    36k   196k    42   16:37:24 

    *0    649     *0     *0       0     3|0       1  40.1g  80.6g   557m    671 syslog:0.9%          0      35|0     1|0    38k   202k    42   16:37:25 

insert  query update delete getmore command flushes mapped  vsize    res faults   locked db idx miss %     qr|qw   ar|aw  netIn netOut  conn       time 

    *0    706     *0     *0       0     1|0       0  40.1g  80.6g   565m    709 syslog:1.0%          0      39|0     1|0    41k   221k    42   16:37:26 

..........

    *0    992     *0     *0       0     1|0       0  40.1g  80.6g   954m    751 syslog:1.1%          0       0|0     1|0    58k   309k    42   16:38:12 

    *0    942     *0     *0       0     3|0       0  40.1g  80.6g   964m    759 syslog:0.9%          0       0|0     0|0    55k   294k    42   16:38:13 

    *0   1026     *0     *0       0     1|0       0  40.1g  80.6g   974m    813 syslog:0.8%          0       0|0     0|0    60k   319k    42   16:38:14 

    *0   1062     *0     *0       0     3|0       0  40.1g  80.6g   985m    826 syslog:0.8%          0       0|0     0|0    62k   331k    42   16:38:15 

    *0   1044     *0     *0       0     1|0    &n


  • 上一条:
    MongoDB数据库插入、更新和删除操作详解
    下一条:
    mongodb与mysql命令详细对比
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 分库分表的目的、优缺点及具体实现方式介绍(0个评论)
    • DevDB - 在 VS 代码中直接访问数据库(0个评论)
    • 在ubuntu系统中实现mysql数据存储目录迁移流程步骤(0个评论)
    • 在mysql中使用存储过程批量新增测试数据流程步骤(0个评论)
    • php+mysql数据库批量根据条件快速更新、连表更新sql实现(0个评论)
    • 近期文章
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2017-06
    • 2017-08
    • 2017-09
    • 2017-10
    • 2017-11
    • 2018-01
    • 2018-05
    • 2018-10
    • 2018-11
    • 2020-02
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2021-02
    • 2021-04
    • 2021-07
    • 2021-08
    • 2021-11
    • 2021-12
    • 2022-02
    • 2022-03
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-07
    • 2023-08
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-03
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客