2013-01-23 25 views
5

gerektiriyorsa, burada herhangi bir yanıt verilmediğinde this question in mongodb google group aksı kullanıyorum.Veritabanını tamir etmek için ne kadar alan daha fazla

Tek bir düğümlü mongo (sürüm 2.0.1) örneğimiz var. Mongo, işletim sistemine geri dönmediği ve kendisini kullanmaya çalıştığı için günlük arşivlemeden sonra bile disk alanı tükeniyor. Şu anda kurulumumuz yaklaşık% 50 alan boşta iken çok seyrek hale gelmiştir. Veri boyutunun 1170 GB civarında olduğunu ve depolama boyutunun 2158 GB olduğunu ve dosya boyutunun 2368 GB olduğunu görebilirsiniz.

db.stats()  
{ 
    "db" : "default",    
    "collections" : 106, 
    "objects" : 553988389, 
    "avgObjSize" : 2094.1392962010254, 
    "dataSize" : NumberLong("1160128855044"), 
    "storageSize" : NumberLong("2315777236208"), 
    "numExtents" : 1487, 
    "indexes" : 107, 
    "indexSize" : 97914435136, 
    "fileSize" : NumberLong("2543459500032"), 
    "nsSizeMB" : 16, 
    "ok" : 1 
} 

Biz alanını geri istiyoruz ve bunun gibi bir misyon kritik sistem (onun günlükleri için bir damping bahçesinde gibi) kesinti sürdürebilen değildir. Ayrıca bir fiziksel veri merkezindeyken bir çoğaltma kümesi oluşturmaya da harcama yapmak istemiyoruz, bu nedenle yalnızca veritabanını onarmak için ek disk eklememeyi tercih edeceğiz.
anlamak istiyorum: -
kadar boş disk alanı
-Ne kadar boşluk biz veritabanını onarmak için almalıdır ne kadar zaman tamir veritabanı
Buralarda sonra kurtarmak için umut onarım veritabanı için gereklidir -Nasıl.
- Tüm onarım veritabanında devam ederse, yalnızca onu öldürmek ve veritabanını yeniden başlatmak güvenlidir.

Verilerinizin toplu olarak toplanması, tek bir koleksiyonda toplanır; bu nedenle, küçük koleksiyonlar onarım veritabanından daha iyi olurlar.

+1

Onarım 2X uzayda kadar gerektirebilir emin olmak için test etmek gerekir. –

+0

2X veri boyutu veya depolama boyutu? – pseudonym

+0

Onarım '' mongodump'' ve '' mongorestore'' yapacak ve bunun için veritabanı kullandığınız disk alanı iki katı gerektirir, yani eski ve yeni veritabanı dosyalarını depolamak için alan gerekir. Bir '' mongodump'' el ile yapabileceğinizden kaçınmak için, veritabanı dosyalarını silin ve '' mongorestore'' komutunu çalıştırın. Alternatif olarak, kullanılmayan alanı geri almanız gerekiyorsa, '' compact'' çalıştırabilirsiniz (2GB boş alan olduğundan emin olun). – diliop

cevap

2

İlk önce 2.0.1'den yükseltmenizi tavsiye ederim. 2.2.2 olmasa bile en az 2.0.7. Onarım 2x dosya boyutunu alır. Dosya boyutunuz olarak veri boyutunuzdan biraz daha büyük bir sonuç elde etmeniz gerekir. Ne kadar süre sistem kaynaklarına ve sisteminizin ne kadar meşgul olduğuna bağlıdır. Compact, diskte boş alan kullanmaz - sadece veri dosyasında birleştirir.

2.2.x size dosyaları parçalanma azaltmak için usePowerOf2Sizes ayarlamak için collMod

komutunu kullanabilirsiniz. ör. 800 bayt belge ve 1024 bayt eklenir. Bu dokümanı sil ve 900 bayt dokümanı ekle, artık 1024 alan yeniden kullanılabilir. Bu olmadan sadece 850 bayt ayrılacak ve 900 baytlık belge için yeni boş alan tahsis edilmiş olacaktır.

RepairDatabase ok olmalıdır öldürme - dosyalar defragg'd sonra tamamlanması üzerine geri kopyalanan yeni konuma kopyalanır ama bunu :)

+0

teşekkür @Sammaye – pseudonym

+0

@ApoorvaGaurav Hi için yeterli olup olmadığını öne sürdüğü gibi, ben MongoDB'yi üretimde büyük yazılarla kullanan ve her haftaki gibi düzenli bir üslupta kompakt yapan kişiler gördüm. Hatta bunu otomatik olarak yapmak için bir betik yazmışlar ve onarımı yapmamaları nedeniyle sonsuza kadar sürdürebilirler ve x2 depolama alanına ihtiyaç duyarlar. Şuna bakın: http://blog.parse.com/2013/03/26/always-be-compacting/ ve işte github'un kodu: https://github.com/ParsePlatform/Ops/blob/master/ araçlar/mongo_compact.rb – Maziyar

İlgili konular