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重命名,即可彻底释放

Mongo库表占用空间统计的更多相关文章

  1. MySQL数据库查看数据表占用空间大小和记录数

    MySQL数据库中每个表占用的空间.表记录的行数的话,可以打开MySQL的 information_schema 数据库.在该库中有一个 TABLES 表,这个表主要字段分别是: TABLE_SCHE ...

  2. MySQL查看表占用空间大小(转)

    MySQL查看表占用空间大小(转) //先进去MySQL自带管理库:information_schema //自己的数据库:dbwww58com_kuchecarlib //自己的表:t_carmod ...

  3. MySQL查看库表的大小

    MySQL数据库空间使用情况查询 如果想知道MySQL数据库中每个表占用的空间.表记录的行数的话,可以打开MySQL的 information_schema 数据库.在该库中有一个 TABLES 表, ...

  4. mysql库表优化实例

    一.SQL优化 1.优化SQL一般步骤 1.1 查看SQL执行频率 SHOW STATUS LIKE 'Com_%'; Com_select:执行SELECT操作的次数,一次查询累加1.其他类似 以下 ...

  5. MySQL库表设计小技巧

    前言: 在我们项目开发中,数据库及表的设计可以说是非常重要,我遇到过很多库表设计比较杂乱的项目,像表名.字段名命名混乱.字段类型设计混乱等等,此类数据库后续极难维护与拓展.我一直相信只有优秀的库表设计 ...

  6. oracle查询单表占用空间的大小

    oracle查询单表占用空间的大小 SELECT segment_name AS TABLENAME, BYTES B, BYTES KB, BYTES MB FROM user_segments w ...

  7. Hibernate 3中如何获得库表所有字段的名称

    15问:Hibernate 3中如何获得库表所有字段的名称 答:可以使用以下的程序获得. Configuration conf = new Configuration(); conf.configur ...

  8. 使用一个T-SQL语句批量查询数据表占用空间及其行数

    原文:使用一个T-SQL语句批量查询数据表占用空间及其行数 要找到数据库中数据表占用的空间和存在的行数.可以使用sp_spaceused搭配数据表的名称.就可以产生该表耗用的空间和现有行数. 如: U ...

  9. mysql基础之对库表操作

    原文:mysql基础之对库表操作 查看一下所有的库,怎么办? Mysql>Show databases; 选库语句: Use 库名 创建一个数据库: create database 数据库名 [ ...

  10. python Mysql 库表

    Mysql 库表    创建 学生信息库表  学生成绩 库表

随机推荐

  1. Kernel Memory 入门系列:生成并获取文档摘要

    Kernel Memory 入门系列:生成并获取文档摘要 前面在RAG和文档预处理的流程中,我们得到一个解决方案,可以让用户直接获取最终的问题答案. 但是实际的业务场景中,仍然存在一些基础的场景,不需 ...

  2. Python——第二章:集合 Set

    set集合,集合的特点是无序的 写法:s = {1,2,3} 但是如果内容是空的,它不是set集合,而是dict字典 s = {} print(type(s)) #输出结果 <class 'di ...

  3. BFS(三)单词接龙 ⅱ

    对应 126. 单词接龙 II 问题描述 按字典 wordList 完成从单词 beginWord 到单词 endWord 转化,一个表示此过程的 转换序列 是形式上像 beginWord -> ...

  4. 使用推测解码 (Speculative Decoding) 使 Whisper 实现 2 倍的推理加速

    Open AI 推出的 Whisper 是一个通用语音转录模型,在各种基准和音频条件下都取得了非常棒的结果.最新的 large-v3 模型登顶了 OpenASR 排行榜,被评为最佳的开源英语语音转录模 ...

  5. Cassandra Gossip协议的二三事儿

    摘要:Gossip协议是Cassandra维护各节点状态的一个重要组件,下面我们以Gossip协议三次握手为线索逐步分析Gossip协议源码. Gossip协议是Cassandra维护各节点状态的一个 ...

  6. 浅谈DWS函数出参方式

    摘要:DWS的PL/pgSQL函数/存储过程中有一个特殊的语法PERFORM语法,用于执行语句但是丢弃执行结果的场景,常用于一些状态判断的场景. 本文分享自华为云社区<GassDB(DWS)功能 ...

  7. 聊聊LiteOS中生成的Bin、HEX、ELF三种文件格式

    摘要:我们在使用编译器在编译工程后会要求生成可执行文件,将这些文件烧录到MCU进行运行,达到我们测试和使用程序的目的,再使用工具链进行编译的时候往往生成.bin..hex ..elf ..alf等文件 ...

  8. 直播预告 | 企业如何轻松完成数据治理?火山引擎 DataLeap 给你一份实战攻略!

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 企业数字化转型正席卷全球,这不仅是趋势所在,也是企业发展必然面对的考题,也是企业最关心.最难决策的难题,数字化不仅 ...

  9. SpringBoot java 一个接口,多个实现,客户定制化

    产品定制化时,在不同的客户中会有不同的需求,这时候会产生,一个接口,多个实现 SpringBoot ,如果发现有多实现时,会报如下错误 Consider marking one of the bean ...

  10. 【Docker】容器操作 mysql部署 redis部署 nginx部署 迁移与备份 Dockerfile

    目录 上节回顾 今日内容 1 容器操作 2 应用部署 2.1 mysql 部署 2.2 redis 2.3 nginx 3 迁移与备份 4 Dockerfile 练习 上节回顾 # 1 docker ...