单机版MongoDB插入了亿万条数据之后...

最近因为公司的一个业务迁移,需要对单机MongoDB做一个简单的测试,在写入了亿万条数据之后,数据库的性能还是受到了一些影响的,这里简单记录下。

因为是非关键业务,且通过统计得出每秒的写入请求数大约是 700 ,每秒的读取请求数大约是10 ,写入请求的入库对于实时性没有太高的要求,所以整个测试不会追求极致性能。

01

测试机器的基本信息如下,双核,8GB 内存。磁盘方面,物理机上是SAS接口的机械硬盘,使用dd命令测试吞吐量大约为160MB/s。

----------------------------------------------------------------------
 CPU Model             : Intel Xeon E3-12xx v2 (Ivy Bridge, IBRS)
 CPU Cores             : 2
 CPU Frequency         : 2799.988 MHz
 CPU Cache             : 16384 KB
 Total Disk            : 485.1 GB (1.6 GB Used)
 Total Mem             : 7962 MB (146 MB Used)
 Total Swap            : 0 MB (0 MB Used)
 System uptime         : 0 days, 16 hour 2 min
 Load average          : 0.00, 0.00, 0.00
 OS                    : Ubuntu 20.04.2 LTS
 Arch                  : x86_64 (64 Bit)
 Kernel                : 5.4.0-72-generic
 TCP CC                : cubic
 Virtualization        : KVM

----------------------------------------------------------------------
 I/O Speed(1st run)    : 122 MB/s
 I/O Speed(2nd run)    : 174 MB/s
 I/O Speed(3rd run)    : 182 MB/s
 Average I/O speed     : 159.3 MB/s

使用fio命令测试磁盘的读取iops

test: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=8
fio-3.16
Starting 1 process

test: (groupid=0, jobs=1): err= 0: pid=3987: Fri Apr 23 03:52:49 2021
  read: IOPS=80.1k, BW=313MiB/s (328MB/s)(9385MiB/30001msec)
    slat (usec): min=3, max=8935, avg= 9.72, stdev= 9.28
    clat (usec): min=23, max=52148, avg=88.84, stdev=225.19
     lat (usec): min=28, max=52152, avg=98.79, stdev=225.39
    clat percentiles (usec):
     |  1.00th=[   57],  5.00th=[   71], 10.00th=[   77], 20.00th=[   84],
     | 30.00th=[   85], 40.00th=[   86], 50.00th=[   86], 60.00th=[   87],
     | 70.00th=[   88], 80.00th=[   91], 90.00th=[  100], 95.00th=[  106],
     | 99.00th=[  133], 99.50th=[  147], 99.90th=[  223], 99.95th=[  239],
     | 99.99th=[ 4686]
   bw (  KiB/s): min=287584, max=334432, per=99.82%, avg=319763.93, stdev=12882.10, samples=59
   iops        : min=71896, max=83608, avg=79941.02, stdev=3220.44, samples=59
  lat (usec)   : 50=0.42%, 100=90.11%, 250=9.43%, 500=0.02%, 750=0.01%
  lat (usec)   : 1000=0.01%
  lat (msec)   : 2=0.01%, 4=0.01%, 10=0.01%, 20=0.01%, 50=0.01%
  lat (msec)   : 100=0.01%
  cpu          : usr=18.94%, sys=78.77%, ctx=10511, majf=0, minf=21
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=100.0%, 16=0.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.1%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=2402656,0,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=8

Run status group 0 (all jobs):
   READ: bw=313MiB/s (328MB/s), 313MiB/s-313MiB/s (328MB/s-328MB/s), io=9385MiB (9841MB), run=30001-30001msec

Disk stats (read/write):
  vda: ios=2391051/13, merge=0/14, ticks=75960/8, in_queue=3252, util=99.78%

已知生产环境中该业务的每秒写入请求数大约是700,单条入库数据的大小平均下来是2KB,那么大约是 1.4MB/s 的写入速度,所以只要是个正常硬盘,磁盘IO这块应该都不是问题。

MongoDB安装的是4.4.5版本,所有参数都为默认值。

db.version()
4.4.5
db.serverStatus().storageEngine.name
wiredTiger

默认情况下8GB的内存 MongoDB会使用(8-1)/2 = 3.5GB。

官方说明:

https://docs.mongodb.com/manual/reference/configuration-options/#storage.wiredTiger.engineConfig.cacheSizeGB

storage.wiredTiger.engineConfig.cacheSizeGB¶
Type: float

Defines the maxim
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作为基于分布式文件存储的数据库,在目前的云计算实践中,MongoDB炙手可热。《深入云计算(MongoDB管理与开发实战详解)》系统全面的介绍了MongoDB开发、管理、维护和性能优化等方方面面。详细而深入,对MongoDB的开发和管理方法进行了详细的讲解,也对MongoDB的工作机制进行了深入的探讨。注重实战,通过实际中的案例为读者讲解使用MongoDB时遇到的各种问题,并给出了解决方案。本书旨在帮助云计算初学者迅速掌握MongoDB数据库,提升读者在云计算实践中的应用和开发能力。同时本书极强的系统性和大量翔实的案例对于有一定基础的中高级用户有非常好的参考价值。 第1篇 基础篇 第1章 MongoDB简介 1.1 关系型数据库简介 1.2 关系型数据库面临的问题 1.3 NoSQL的崛起 1.4 MongoDB是如何解决这些问题的 1.5 初识MongoDB 1.5.1 MongoDB的特点 1.5.2 数据模型 1.5.3 扩展性 1.5.4 功能性 1.5.5 速度快 1.5.6 简便的管理 1.5.7 使用场合 1.6 本章小结 第2章 MongoDB基本原理与安装 2.1 数据库结构 2.2 文档 2.3 集合 2.3.1 集合的无模式 2.3.2 集合的命名 2.4 MongoDB数据类型 2.4.1 基本数据类型 2.4.2 数字类型 2.4.3 日期类型 2.4.4 数组类型 2.4.5 内嵌文档类型 2.4.6 _id键和ObjectId对象 2.5 MongoDB的下载和安装 2.5.1 MongoDB的下载 2.5.2 在Windows平台下的下载与安装 2.5.3 在Linux平台下的下载与安装 2.6 MongoDB shell的使用 2.6.1 启动Shell 2.6.2 使用Shell对MongoDB的基本操作 2.6.3 使用Shell的诀窍 2.6.4 特殊的集合名 2.7 本章小结 第3章 文档的增加、修改及删除 3.1 插入并保存文档 3.1.1 插入的原理和作用 3.1.2 批量插入 3.2 删除文档 3.3 修改文档 3.3.1 整个文档的替换 3.3.2 使用修改器 3.3.3 upsert和save更新 3.3.4 修改多个文档 3.3.5 修改文档并返回修改后的文档 3.4 数据库响应 3.4.1 安全操作 3.4.2 捕获异常 3.5 客户端请求和MongoDB数据库连接 3.6 本章小结 第2篇 应用篇 第4章 查询 4.1 find简介 4.1.1 返回指定的键 4.1.2 find查询限制 4.2 件操作符 4.2.1 $all匹配所有 4.2.2 $exists判断字段是否存在 4.2.3 null值处理 4.2.4 $mod取模运算 4.2.5 $ne不等于 4.2.6 $in包含 4.2.7 $nin不包含 4.2.8 $size数组元素个数 4.2.9 正则表达式匹配 4.2.10 Javascript 查询和$where 查询 4.2.11 count查询记录数 4.2.12 limit限制返回记录数 4.2.13 skip 限制返回记录的起点 4.2.14 sort 排序 4.2.15 分页查询 4.2.16 随机抽取文档 4.3 distinct找出给定键所有不同的值 4.4 group分组 4.4.1 使用完成器 4.4.2 将函数作为键使用 4.5 游标 4.6 存储过程 4.7 本章小结 第5章 Capped集合 5.1 特性 5.2 使用和约束 5.3 应用 5.3.1 创建 capped collection 5.3.2 限制capped collection中对象个数 5.4 注意事项 5.5 本章小结 第6章 GridFS存储文件 6.1 为什么要用GridFS 6.2 如何实现海量存储 6.3 语言支持 6.4 简单介绍 6.5 命令行工具 6.6 内部原理 6.7 本章小结 第7章 MapReduce统计 7.1 Map函数 7.2 Reduce函数 7.3 结果存储 7.4 对Reduce函数结果进一步处理 7.5 其他控制细节 7.6 本章小结 第3篇 管理篇 第8章 管理 8.1 启动和停止MongoDB 8.1.1 使用命令行启动 8.1.2 配置文件 8.1.3 Daemon方式启动 8.1.4 mongod参数说明 8.1.5 停止数据库 8.2 访问控制 8.2.1 绑定IP内网地址访问Mongo

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值