zoukankan      html  css  js  c++  java
  • 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重命名,即可彻底释放

  • 相关阅读:
    浅谈java中异常处理
    Android四大组件之BroadcastReceiver
    android基本组件 Button
    Android基本组件TextView和EditView
    Unicode,GBK和UTF8
    记一次生产上的紧急修复之后解疑过程
    使用第三方jar时出现的问题
    码农歌单
    创建servlet程序知识点详解---servlet-day12
    创建servlet程序知识点详解---servlet-day07
  • 原文地址:https://www.cnblogs.com/mengrennwpu/p/14722867.html
Copyright © 2011-2022 走看看