標籤:
測試環境:192.168.1.55,單機
資料量: 4千萬左右。
測試:db.repaireDatabase效果
db.compact 效果
通過stats命令擷取該資料庫的相關資訊:
db.stats() { "db" : "test",
"collections" : 7, --collection 數量
"objects" : 28, --對象數量
"avgObjSize" : 50.57142857142857, --對象平均大小
"dataSize" : 1416, --資料大小
"storageSize" : 31744, --資料大小(含預分配空間)
"numExtents" : 7, --事件數目量
"indexes" : 7, --索引數量
"indexSize" : 57344, --索引大小
"fileSize" : 50331648, --檔案大小
"ok" : 1 --本次取stats 是否正常
} >
1. 未刪資料前
show dbs
aa 0.000GB
admin 0.000GB
gwgps 3.609GB
local 0.000GB
db.stats()
{
"db" : "gwgps",
"collections" : 1,
"objects" : 41345131,
"avgObjSize" : 554.8684502656431,
"dataSize" : 22941108764,
"storageSize" : 3081945088,
"numExtents" : 0,
"indexes" : 3,
"indexSize" : 792702976,
"ok" : 1
}
2.程式刪除N條後
show dbs
aa 0.000GB
admin 0.000GB
gwgps 3.610GB
local 0.000GB
db.stats()
{
"db" : "gwgps",
"collections" : 1,
"objects" : 41344233,
"avgObjSize" : 554.8684691284514,
"dataSize" : 22940611272,
"storageSize" : 3081945088,
"numExtents" : 0,
"indexes" : 3,
"indexSize" : 794288128,
"ok" : 1
}
3.repaireDatabase之後
db.repairDatabase()
{ "ok" : 1 }
show dbs
aa 0.000GB
admin 0.000GB
gwgps 3.609GB
local 0.000GB
db.stats()
{
"db" : "gwgps",
"collections" : 1,
"objects" : 41344233,
"avgObjSize" : 554.8684691284514,
"dataSize" : 22940611272,
"storageSize" : 3081945088,
"numExtents" : 0,
"indexes" : 3,
"indexSize" : 792682496,
"ok" : 1
}
4.compact命令
> db.runCommand({compact:‘location‘}) { "ok" : 1 }
show dbs
aa 0.000GB
admin 0.000GB
gwgps 3.612GB
local 0.000GB
db.stats()
{
"db" : "gwgps",
"collections" : 1,
"objects" : 41337719,
"avgObjSize" : 554.8686059818637,
"dataSize" : 22937002516,
"storageSize" : 3081945088,
"numExtents" : 0,
"indexes" : 3,
"indexSize" : 795889664,
"ok" : 1
}
經過重複迴圈多次刪除之後,用repaireDatabase,show dbs, du -sh命令查看空間,暫得到如下結論:
1. 使用db.repairDatabase時候建議停止資料庫的讀寫,需要大於等於資料差不多的空間,否則可能無法執行該命令。
2. 4千萬資料repairDatabase需要大約10分鐘左右,40億,400億,4000億效果待測。
3. storageSize 該值未減少,因為包括預分配空間,有其積極的意義。
4. 實際空間減少的是索引所佔的空間。
5. 對空間可控可以禁用日誌或日誌輪詢複寫,但不推薦。
6. 禁止預分配空間或預設定分配空間(啟動資料庫時可以選擇noprealloc參數),但影響插入效率。
7. 推薦合適時機定時壓縮,採用compact壓縮指定collection,或repairDatabase壓縮資料庫。
MongoDB空間整理