mongodb存储的集合和database太多容易引起的问题

本文讨论了当MongoDB数据库中的表数量过多(如几万级别)时,可能导致的启动慢、内存消耗大、运维复杂、namespace限制等问题,并详细解释了故障原因,特别是超出了namespace上限。解决方案包括增大nssize或切换到WiredTiger存储引擎,但同时也可能带来磁盘空间浪费和潜在风险。
摘要由CSDN通过智能技术生成

在数据库表和对象设计过程中,碰到有些客户的db表数量非常多,达到几w以上的级别,这时往往容易引起一些运维难度和复杂度,以mongodb举例,分享下遇到的一些问题

1 mongod启动非常慢,db大概有2w多个,后台mongod显示先等了很长一段时间后,一直显示opening  db...所以如果没有副本集,哪次db挂了或者变更需要重启db,漫长的等待往往无法接受(将近1小时)

2 mongos内存消耗严重,mongos会存取最新的元数据信息,太多的表对象容易引起mongos内存使用巨大

3 运维难度太大,随便运行个管理命令就刷屏,比如sh.status(),show dbs每次需要我先重定向到一个文件再处理

4 大量消耗namespace,超过设定的限制,导致db异常报错。下面重点分析下这一条

5 大量消耗文件描述符,甚至超过ulimit限制,导致db崩溃,服务不可用

6 执行部分命令失败,比如db.runCommand({top:1})报错BSONObj size: 16912404 (0x1021014) is invalid. Size must be between 0 and 16793600(16MB) First element: note: \"all times in microseconds\,具体的可以参考bug列表https://jira.mongodb.org/browse/SERVER-25437

故障现象

mongo错误日志报错如下

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值