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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM