当前位置:   article > 正文

云厂商MongoDB性能测试

mongodb性能测试

0、概述

由于工作关系,笔者曾对国内外四家云厂商巨头的 MongoDB 产品做了性能测试,测试对象是托管的 MongoDB V4.0 三节点副本集架构。由于不同云厂商的产品规格并不统一,比如 MongoDB V4.0 副本集架构国内的A云、T云有4C8G的规格,国内的H云和国外A云(以下采用AW云)并没有该规格。因此,H云选择4C16G规格替代,AW云选择4C32G规格替代。另外,这次测试是2022年Q2做的,不代表云厂商产品的当前状态。综上情况,此次云厂商MongoDB性能测试结果,不具有生产实际参考,仅供参考。

本次测试的场景是“95%读5%写”和“50%读50%写”,观测了这两种场景下,云厂商托管的MongoDB在不同线程数下的每秒操作数(throughput ops/sec)、RAL(us) 平均读时延、WAL(us) 平均写时延、系统负载等指标。

测试结论:在上述测试条件,两种场景的AW云的MongoDB 副本集性能最好,H云、A云和T云以及On Ecs自建的性能相差并不大。由于数据库服务端的CPU核数是4,故在16线程的性能到达峰值,再增加线程数,数据库性能下降。见下图1和图2。

1028e0e1085aa163b3ec3d918c0d16db.png

图1:95%读5%写

30b2ae44aa3bfe01484fe8222e7193c0.png

图2:50%读50%写

1、测试环境

1.1 测试工具

YCSB全称为“Yahoo!Cloud Serving Benchmark”,是雅虎用于测试云NoSQL的工具,支持对常见的NoSQL产品进行性能测试,如Cassandra、MongoDB、HBase、Redis等。使用该工具前,还需要下载和配置JDK、Maven、python组件。相关组件的下载配置详见YCSB介绍。

1.2 服务端信息

81f6d31c7e979cc8040f8f3c85785e5b.png

注意:本次测试云厂商的MongoDB产品,均使用默认参数。

1.3 客户端信息

9dc064840869ead2c5f223dc1a161d8b.png

2、测试步骤

2.1 Load数据阶段

在测试生成数据阶段,使用100个线程,生成2000万的数据,数据大约有25G。

命令如下:

 
 

ycsb load mongodb -s -P  /root/ycsb-0.17.0/workloads/workloada -threads 100 -p insertstart=0 -p recordcount=20000000 -p readproportion=0 -p updateproportion=0 -p insertproportion=1 -p requestdistribution=uniform -p mongodb.url=mongodb://user:password@ip:port/admin -p mongodb.database=ycsb  -p table=t_test >  load_result.txt

workload相关参数介绍如下:

  1. recordcound:load阶段加载到数据库的纪录条数 (default: 0) ,run阶段操作的数据范围(注:run阶段该值不能大于load阶段的值,否则会出报错)
  2. operationcount:run阶段执行的操作总数
  3. threads:请求线程数,不要超过服务端的maxConnect数,否则会报错
  4. readproportion: 读操作比例 (default: 0.95)
  5. updateproportion: 更新操作比例 (default: 0.05)
  6. insertproportion: 插入操作比例 (default: 0)
  7. insertstart:第一个插入值的偏移量(default: 0)
  8. requestdistribution: 请求的分布规则 uniform, zipfian or latest
  9. mongodb.url:待测试mongo实例的连接地址
  10. mongodb.database:测试时使用的数据库名称(default: ycsb)
  11. table: 测试表的名称 (default: usertable)

2.2 Run性能阶段

  • 95%读5%写

测试命令如下:

ycsb run mongodb -s -P /root/ycsb-0.17.0/workloads/workloada -threads ${num} -p recordcount=3000000 -p operationcount=5000000 -p insertstart=0 -p insertcount=0 -p readproportion=0.95 -p updateproportion=0.05 -p insertproportion=0 -p mongodb.url=mongodb://user:password@ip:port/admin -p mongodb.database=ycsb  -p table=t_test  > run_95_5_result_${num}.txt
  • 50%读50%写

测试命令如下:

ycsb run mongodb -s -P /root/ycsb-0.17.0/workloads/workloada -threads ${num} -p recordcount=3000000 -p operationcount=5000000 -p insertstart=0 -p insertcount=0 -p readproportion=0.5 -p updateproportion=0.5 -p insertproportion=0 -p mongodb.url=mongodb://user:password@ip:port/admin -p mongodb.database=ycsb  -p table=t_test  > run_5_5_result_${num}.txt

使用以上命令分别测试2、4、8、16、32、64、128、256线程,并记录相关测试数据。

3、测试数据

3.1 95%读5%写场景

a7b68ea314bab3232f4c91571d393543.png表3

3.2 50%读50%写场景

ffc73c42024823f5511c5a102d0b7d9e.png

表4

总结分析表3和表4数据可以发现:

  • 每秒操作数一开始随着线程数的增加而增大,到达一定线程数后,每秒线程数下降。最大值均出现在16个线程时。

  • 当线程数到达16时,各家云厂商的产品CPU负载均到达了95%以上。

  • 当线程数到达32时,平均RT是负载较低时的10倍左右。

  • 50%写50%读场景,数据库每秒操作数降低了2倍左右,RT也增长了2倍左右。

  • 自建的MongoDB在性能上,和同规格的阿里云、腾讯云并没有太大差异,性能基本相同。

4、测试总结

通过上述测试分析后,在生产使用4C8G的副本集架构产品时,不建议线程数使用过多。因为线程数过多并不能提高读写性能,反而RT会增长很大,由此可能会带来性能不稳定。建议线程数和服务端CPU核数保持一致或者略高。总体看,各云厂家MongoDB产品的性能差距并不大。

5、参考

  • YCSB使用介绍 @YCSB Github Documentation

  • MongoDB介绍 @MongoDB Documentation

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/734338
推荐阅读
相关标签
  

闽ICP备14008679号