Mongo库表占用空间统计
1. 背景
DBA同事反馈说Mongp集群磁盘占用空间过大,超过监控告警95%阈值,因此建议删除部分资源或者申请扩容,本着开源节流的理念,还是乖乖看哪些老数据应该删除。但Mongo中的库和表过多,因此如何进行统计?
2. MongoDB库表占用空间统计
其实,MongoDB中库表的占用空间统计方式N多种,比如通过各种语言依赖包如java的mongodb-driver、python的pymongo等支持统计,选择个人擅长的一种即可。
由于mongo命令行支持运行js代码,因此计划使用js代码来执行(免得要打开各种IDE界面或命令行窗口)
2.1 库占用统计
库占用简单,运行如下命令即可
show dbs;
运行结果如下
mongos> show dbs; CloudCrawler 0.000GB MarkHistory 0.025GB Medal 0.005GB Result 0.072GB ResultHistory 0.051GB admin 0.000GB admind_for_test 0.000GB
2.2 表占用统计
表占用统计,即统计每个库下每个表的大小,运行如下命令即可,该代码仅统计指定库下表的分布
tabName = db.getCollectionNames(); function getReadableFileSizeString(tabName) { for(var j=0;j<tabName.length;j++){ var name=tabName[j]; var cnt=db.getCollection(name).find({}).count(); var fileSizeInBytes= db.getCollection(name).stats().size; var i = -1; var byteUnits = [' kB', ' MB', ' GB', ' TB', 'PB', 'EB', 'ZB', 'YB']; do { fileSizeInBytes = fileSizeInBytes / 1024; i++; } while (fileSizeInBytes > 1024); print(name + ' cnt:' + cnt + ' size:'+Math.max(fileSizeInBytes, 0.1).toFixed(1) + byteUnits[i]); } }; getReadableFileSizeString(tabName);
运行结果,标识edt_manage_prod库下各个collection的统计
edu_manage_prod: CheckTask cnt:53 size:7.7 kB OCR_TMP_GFS.chunks cnt:2554250 size:96.6 GB OCR_TMP_GFS.files cnt:2529063 size:1.2 GB eduManifestQuestion cnt:709 size:15.7 MB jhi_user cnt:0 size:0.1 kB survey_result cnt:25 size:101.3 kB survey_task cnt:19 size:44.6 kB system.profile cnt:185 size:210.6 kB
3. 解决
按照如上即可统计中所有库对应表的占用大小,找到占比最大几张表,与业务线确认表是否仍在使用,确认后执行备份后删除即可。
注意:
(1) 执行db.collection.remove()只是清空数据,占用的磁盘空间仍没有释放,因此建议使用db.collection.drop()或执行remove后对该collection重命名,即可彻底释放
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了