千家信息网

Mongodb性能压测

发表于:2026-10-30 作者:千家信息网编辑
千家信息网最后更新 2026年10月30日,一、背景这几天对所有的基础组件做一个摸底的基准压力测试,目前我们所有的开源基础组件都没有做过性能测试,经常有开发人员问,我们的RDS、MongoDB集群能抗多大量呀,这个时候我是没办法回复的,因为我自
千家信息网最后更新 2026年10月30日Mongodb性能压测

一、背景

这几天对所有的基础组件做一个摸底的基准压力测试,目前我们所有的开源基础组件都没有做过性能测试,经常有开发人员问,我们的RDS、MongoDB集群能抗多大量呀,这个时候我是没办法回复的,因为我自己也不知道,虽然一个数据库集群能抗多大量,在软件、硬件配置固定的情况下,和业务场景有很大的关系,如果数据量小,查询SQL简单那吞吐量自然很高,如果数据量特别大并且都是复杂SQL,那吞吐量自然上不去;但是既然人家问了,肯定是希望有一个答案,如果你说不知道,那会给人一种不靠谱的感觉,所以做一次基准压力测试,我们知道在特定的场景下我们的集群能有多大的吞吐量,做到自己心里有数,才给别人信心。这周在压测MongoDB,谷歌了一番,MongoDB的压测工具很少,有几篇是介绍通过YCSB压测MongoDB的,找丹姐(逻辑思维首席DBA)推荐一款MongoDB的压测工具,丹姐也推荐YCSB,好吧,那就它吧,开整。

二、环境说明

1、MongoDB集群配置(一个分片的shard集群)

2、MongoDB版本

4.0.4-62-g7e345a7
4、系统及内核版本

CentOS Linux release 7.5.1804 (Core)3.10.0-862.14.4.el7.x86_64

3、YCSB版本

YCSB-0.16.0-RC1.

4、测试说明

三、安装

1、jdk及maven安装参考官方

https://github.com/brianfrankcooper/YCSB/tree/master/mongodb

2、安装YCSB

wget https://github.com/brianfrankcooper/YCSB/archive/0.16.0-RC1.tar.gztar -zxvf YCSB-0.16.0-RC1.tar.gzcd YCSB-0.16.0-RC1/mvn clean package -Dmaven.test.skip=true

PS:
安装过程中maven下载依赖需要×××,如果有安装失败的包,需要在能×××的服务器上下载手动安装,比如mongodb-async-driver-2.0.1.jar就需要×××,下面是手动安装方法
A、手动下载jar包
wget http://www.allanbank.com/repo/com/allanbank/mongodb-async-driver/2.0.1/mongodb-async-driver-2.0.1.jar
B、加压包,从pom.xml 文件里面查看groupId、artifactId、version
C、手动安装

mvn install:install-file -Dfile=/tmp/mongodb-async-driver-2.0.1.jar  -DgroupId=com.allanbank -DartifactId=mongodb-async-driver -Dversion=2.0.1 -Dpackaging=jarmvn -pl com.yahoo.ycsb:mongodb-binding -am clean package

四、压测

1、编写压测文件

在workloads目录下有很多压测文件用到的文件,我们从其中一个copy一份,编辑添加我们自己定义的内容

vim workloads/2000wongodb.url=mongodb://root:123456@172.21.244.101:27000mongodb.writeConcern=normaltable=chj_2000wrecordcount=20000000operationcount=50000000readallfields=truereadproportion=0updateproportion=0scanproportion=0insertproportion=1requestdistribution=zipfianworkload=com.yahoo.ycsb.workloads.CoreWorkload

关于YCSB的压测文件的每个参数的解释如下:

fieldcount: 每条记录字段个数 (default: 10)fieldlength: 每个字段长度 (default: 100)readallfields: 是否读取所有字段true或者读取一个字段false (default: true)readproportion: 读取作业比例 (default: 0.95)updateproportion: 更新作业比例 (default: 0.05)insertproportion: 插入作业比例 (default: 0)scanproportion: 扫描作业比例 (default: 0)readmodifywriteproportion: 读取一条记录修改它并写回的比例 (default: 0)requestdistribution: 请求的分布规则 uniform, zipfian or latest (default: uniform)maxscanlength: 扫描作业最大记录数 (default: 1000)scanlengthdistribution: 在1和最大扫描记录数的之间的分布规则 (default: uniform)insertorder: 记录被插入的规则ordered或者hashed (default: hashed)operationcount: 执行的操作数.maxexecutiontime: 执行操作的最长时间,当然如果没有超过这个时间以运行时间为主。table: 测试表的名称 (default: usertable)recordcount: 加载到数据库的纪录条数 (default: 0)

2、造数据,也是测写入性能

./bin/ycsb load mongodb -threads 100 -P workloads/2000w
输出结果说明

[OVERALL], RunTime(ms), 37182  #数据加载所用时间(毫秒)[OVERALL], Throughput(ops/sec), 13447.367005540314  #加载操作的吞吐量(ops/sec)[TOTAL_GCS_PS_Scavenge], Count, 37[TOTAL_GC_TIME_PS_Scavenge], Time(ms), 146[TOTAL_GC_TIME_%_PS_Scavenge], Time(%), 0.3926631165617772[TOTAL_GCS_PS_MarkSweep], Count, 0[TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 0[TOTAL_GC_TIME_%_PS_MarkSweep], Time(%), 0.0[TOTAL_GCs], Count, 37[TOTAL_GC_TIME], Time(ms), 146[TOTAL_GC_TIME_%], Time(%), 0.3926631165617772[CLEANUP], Operations, 64[CLEANUP], AverageLatency(us), 422.09375[CLEANUP], MinLatency(us), 0[CLEANUP], MaxLatency(us), 26911[CLEANUP], 95thPercentileLatency(us), 3[CLEANUP], 99thPercentileLatency(us), 30[INSERT], Operations, 500000  # 执行insert操作的总数[INSERT], AverageLatency(us), 4658.931652  # 每次insert操作的平均延时(微秒)[INSERT], MinLatency(us), 831 # 所有insert操作的最小延时(微秒)[INSERT], MaxLatency(us), 1784831 # 所有insert操作的最大延时(微秒)[INSERT], 95thPercentileLatency(us), 9711  # 95%的insert操作延时在9毫秒以内[INSERT], 99thPercentileLatency(us), 17903 # 99%的insert操作延时在17毫秒以内[INSERT], Return=OK, 500000

3、压测

通过调整压测文件中read和update的比例,模拟只读和读写混合的操作

./bin/ycsb run mongodb -threads 100 -P workloads/2000w

[OVERALL], RunTime(ms), 1735408[OVERALL], Throughput(ops/sec), 2881.1668495247227[TOTAL_GCS_PS_Scavenge], Count, 3975[TOTAL_GC_TIME_PS_Scavenge], Time(ms), 6180[TOTAL_GC_TIME_%_PS_Scavenge], Time(%), 0.3561122226012557[TOTAL_GCS_PS_MarkSweep], Count, 0[TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 0[TOTAL_GC_TIME_%_PS_MarkSweep], Time(%), 0.0[TOTAL_GCs], Count, 3975[TOTAL_GC_TIME], Time(ms), 6180[TOTAL_GC_TIME_%], Time(%), 0.3561122226012557[READ], Operations, 500346[READ], AverageLatency(us), 2851.9638989819045[READ], MinLatency(us), 696[READ], MaxLatency(us), 646655[READ], 95thPercentileLatency(us), 6991[READ], 99thPercentileLatency(us), 23103[READ], Return=OK, 500346[CLEANUP], Operations, 10[CLEANUP], AverageLatency(us), 3131.0[CLEANUP], MinLatency(us), 1[CLEANUP], MaxLatency(us), 31295[CLEANUP], 95thPercentileLatency(us), 31295[CLEANUP], 99thPercentileLatency(us), 31295[UPDATE], Operations, 4499654[UPDATE], AverageLatency(us), 3534.2083122391186[UPDATE], MinLatency(us), 704[UPDATE], MaxLatency(us), 1078271[UPDATE], 95thPercentileLatency(us), 11647[UPDATE], 99thPercentileLatency(us), 27343[UPDATE], Return=OK, 4499654

五、指标观察

1、服务器指标,主要观察CPU、内存、磁盘IO的利用率和延时,可以通过top、iostat工具查看实时情况
2、MongoDB可以通过mongostat 工具查看实时情况

mongostat的输出说明

inserts:每秒插入次数query:每秒查询次数update:每秒更新次数delete:每秒删除次数getmore:每秒执行getmore次数command:每秒的命令数,比以上插入、查找、更新、删除的综合还多,还统计了别的命令dirty:WiredTiger存储引擎中dirty 数据占缓存百分比used:WiredTiger存储引擎中引擎使用缓存占百分比flushs:每秒执行fsync将数据写入硬盘的次数。vsize:虚拟内存使用量,单位MBres:物理内存使用量,单位MBqrw:客户端等待读的长度,队列中的长度arw:客户端等待写的队列长度netIn 和 netOut:网络流量,单位是字节 byteconn:当前连接数time:时间戳

六、测试结果

数据 文件 次数 比例 测试 时间 集群 作业 吞吐量 字段 工具 手动 长度 吞吐 最大 内存 单位 引擎 情况 版本 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技股 有格互联网科技 广东万易互联网科技有限公司惠州分公司 互联网佳科技有限公司 苏州找大状互联网科技有限公司 科技与互联网 银优互联网科技有限公司 菲比寻常互联网科技 互联网科技视频素材 重庆科技学院互联网 华服互联网科技官网 互联网媒体平台算高科技产业 本届互联网博览会上的黑科技 郑州欣桑互联网科技有限公司 上海乐五互联网科技有限公司 互联网科技收购价值 杭州科技互联网公司有哪些 网互联网络科技 每日互联网科技新闻 科技发展第三阶段互联网时代 苏州找大状互联网科技有限公司 哈尔滨新华互联网科技 新华互联网科技校企合作 深圳国际航运科技和互联网 保险科技服务互联网营销体系 浙南科技城互联网大厦招聘 上海同邻互联网科技有限公司规模 求路客互联网科技电话 三亚科技创新互联网基地 互联网对科技影响
0