Disk alanı kullanımı, ApsaraDB for MongoDB örnekleri için kritik bir ölçümdür. Bir örneğin disk alanı dolduğunda erişilemez hale gelir. Disk alanı kullanımını nasıl kontrol edeceğinizi, yüksek kullanımın nedenlerini nasıl belirleyeceğinizi ve optimizasyon stratejilerini nasıl uygulayacağınızı öğrenin.
Arka plan bilgileri
Disk alanı kullanımı %80 veya üzerine ulaşırsa örneğin dolmasını önlemek için veritabanının gerçek alan tüketimini azaltın veya depolama kapasitesini genişletin.
Alan kullanımını kontrol etme
Çoğaltma kümesi mimarisi
ApsaraDB for MongoDB örneğiniz çoğaltma kümesi mimarisi kullanıyorsa ApsaraDB for MongoDB konsolu üzerinde oturum açın ve alan kullanımını kontrol etmek için aşağıdaki yöntemleri kullanın:
-
Genel bakış
Basic Information sayfasında Specification Information bölümüne giderek örneğin Disk space ve Usage değerlerini görüntüleyin.
-
İzleme grafiği analizi
Sol gezinme bölmesinde Monitoring Information seçeneğini tıklayın. Hedef düğümü seçerek Disk Usage (Bytes) ve Disk Usage (%) değerlerini görüntüleyin.
Bir ApsaraDB for MongoDB çoğaltma kümesi örneği; okuma ve yazma işlemleri için bir birincil düğüm, yüksek kullanılabilirlik için bir veya daha fazla ikincil düğüm, gizli bir düğüm ve isteğe bağlı salt okunur düğümlerden oluşur. Her düğümün alan kullanımı
data_sizevelog_sizebileşenlerinden oluşur; buradains_size = data_size + log_sizeşeklindedir:data_size:localveritabanı hariç, veriler tarafından kullanılan disk alanı. Bu; veri dosyalarını (collectionönekli), dizin dosyalarını (indexönekli) veWiredTiger.wtgibi meta veri dosyalarını içerir.log_size:localveritabanının fiziksel boyutu, MongoDB çalışma zamanı günlüklerinin boyutu ve bazı denetim günlüklerinin boyutu.
-
Ayrıntılı analiz
Alan kullanımını ayrıntılı olarak analiz etmek için aşağıdaki yöntemleri kullanın:
-
MongoDB'nin yerel komutlarını
db.stats()vedb.$collection_name.stats()kullanın.Bu komutlar hakkında daha fazla bilgi için aşağıdaki MongoDB belgelerine bakın:
-
sayfasını kullanın.
sayfasında aşağıdaki bilgileri görüntüleyebilirsiniz:
Veritabanları ve koleksiyonlar için alan kullanımına genel bakış, ortalama günlük artış ve depolama alanının dolmasına kadar tahmini gün sayısı.
Anormal veritabanlarının ve tabloların alan kullanımı.
İş koleksiyonları için ayrıntılı alan kullanımı; dizin dosyası boyutu, veri dosyası boyutu, sıkıştırma oranı analizi ve ortalama belge boyutu dahil.
-
Parçalanmış küme mimarisi
ApsaraDB for MongoDB örneğiniz parçalanmış küme mimarisi kullanıyorsa ApsaraDB for MongoDB konsolu üzerinde oturum açın ve alan kullanımını kontrol etmek için aşağıdaki yöntemleri kullanın:
-
İzleme grafiği analizi
Monitoring Information sayfasında hedef düğümü seçerek Disk Usage (Bytes) ve Disk Usage (%) değerlerini görüntüleyin.
-
Ayrıntılı analiz
MongoDB'nin yerel komutlarını
db.stats()vedb.$collection_name.stats()kullanarak her düğümün alan kullanımını sırayla analiz edin.
Veri parçalanmasından kaynaklanan yüksek alan kullanımı
Sıkıştırma sırasında örnek üzerindeki etki
compact işlemi süresi koleksiyon boyutuyla doğru orantılı olduğundan uzun sürebilir. Okuma ve yazma işlemlerini etkilememek için compact işlemini yoğun saatler dışında çalıştırın.
Compact yöntemi
İşiniz üzerindeki etkiyi en aza indirmek için önce ikincil bir düğümde db.runCommand({compact:"collectionName"}) komutunu çalıştırın ve ardından birincil/ikincil anahtarlama işlemi yapın. collectionName yerine koleksiyonunuzun adını yazın.
compact komutunun kullanımı hakkında daha fazla bilgi için bkz. Disk kullanımını iyileştirmek için diskleri parça defragmentasyonu yapın.
Büyük günlüklerden kaynaklanan artan alan kullanımı
Büyük journal günlüklerinden kaynaklanan alan farkı
4,0 sürümünden önceki ApsaraDB for MongoDB sürümlerinde, ana makinedeki açık dosya sayısı sınıra ulaştığında dahili günlük sunucusu temizleme iş parçacığı kesintiye uğrar ve journal günlüğü sonsuza kadar büyür. MongoDB çalışma zamanı günlüklerinde aşağıdakine benzer günlük girişleri görürseniz çekirdeği ApsaraDB for MongoDB 4,0 veya sonraki bir sürüme yükseltin. Geçici bir çözüm olarak mongod sürecini yeniden başlatın. Daha fazla ayrıntı için bkz. log-server thread exit quietly on error while the mongodb process still running.
2019-08-25T09:45:16.867+0800 I NETWORK [thread1] Listener: accept() returns -1 Too many open files in system
2019-08-25T09:45:17.000+0800 I - [ftdc] Assertion: 13538:couldn't open [/proc/55692/stat] Too many open files in system src/mongo/util/processinfo_linux.cpp 74
2019-08-25T09:45:17.002+0800 W FTDC [ftdc] Uncaught exception in 'Location13538: couldn't open [/proc/55692/stat] Too many open files in system' in full-time diagnostic data capture subsystem. Shutting down the full-time diagnostic data capture subsystem.
Çoğaltma gecikmesi ve yedeklemelerden kaynaklanan günlük büyümesi
Bir ApsaraDB for MongoDB örneğinde çoğaltma gecikmesi yaşandığında oplog'un kullanılabilir boyutu artık yapılandırma dosyasında tanımlanan sabit boyutlu koleksiyonla sınırlı değildir. Teorik olarak sağlanan disk kapasitesinin %20'sine kadar büyüyebilir. Gecikme çözüldükten sonra oplog tarafından kaplanan ekstra alan otomatik olarak geri kazanılmaz.
Fiziksel bir yedekleme sırasında gizli bir düğümdeki ApsaraDB for MongoDB örneği çok sayıda kontrol noktası oluşturarak daha fazla veri ve günlük alanı tüketir.
Her iki senaryoda da sorunu oplog üzerinde bir compact işlemi çalıştırarak çözebilirsiniz:
compact işlemi sırasında tüm yazma işlemleri engellenir.
db.grantRolesToUser("root", [{db: "local", role: "dbAdmin"}])
use local
db.runCommand({ compact: "oplog.rs", force: true })
Uygun olmayan parçalama nedeniyle oluşan veri dengesizliği
Uygunsuz parça anahtarı türü
Parçalanmış bir kümede parça anahtarı türünün seçimi kritiktir. İki ana tür karma parçalama ve aralıklı parçalamadır. Disk dengesi açısından karma parçalama, aralıklı parçalamadan genellikle daha iyi bir stratejidir çünkü ApsaraDB for MongoDB verileri anahtar değerlerine göre parçalar arasında eşit şekilde dağıtmak için dahili bir karma işlevi kullanır. Buna karşılık aralıklı parçalama verileri anahtar değeri aralıklarına göre dağıtır; bu durum yeni verilerin "sıcak" bir yığın halinde yoğunlaşmasına, ilgili parçada yüksek disk G/Ç yüküne ve kısa vadeli veri dengesizliğine neden olabilir.
Parça anahtarı türleri hakkında daha fazla bilgi için bkz. sharding-shard-key, hashed-sharding ve ranged-sharding.
Uygunsuz parça anahtarı alanı
Her parçadaki yığın sayısı benzer olsa da verilerin çoğu birkaç yığında yoğunlaşır. Sonuç olarak bu "sıcak" yığınları içeren parçalar diğerlerinden önemli ölçüde daha fazla veri depolar. sh.status() komutunu çalıştırdığınızda ve ApsaraDB for MongoDB çalışma zamanı günlüklerini kontrol ettiğinizde aşağıdakine benzer uyarı mesajları görebilirsiniz:
2019-08-27T13:31:22.076+0800 W SHARDING [conn12681919] possible low cardinality key detected in superHotItemPool.haodanku_all - key is { batch: "201908260000" }
2019-08-27T13:31:22.076+0800 W SHARDING [conn12681919] possible low cardinality key detected in superHotItemPool.haodanku_all - key is { batch: "201908260200" }
2019-08-27T13:31:22.076+0800 W SHARDING [conn12681919] possible low cardinality key detected in superHotItemPool.haodanku_all - key is { batch: "201908260230" }
Mongos dengeleyicisi verilerin dengeli olup olmadığını belirlemek için öncelikli olarak her parçadaki yığın sayısını dikkate alır. Bu durum yığın sayılarının dengeli olduğu ancak gerçek veri dağılımının büyük ölçüde eğrildiği bir senaryoya yol açabilir. Bunun nedeni bir yığın içindeki parça anahtarı değerlerinin neredeyse aynı olmasıdır. Yığın 64 MB bölme eşiğine ulaştığında MongoDB onu böler ve boş bir yığın oluşturur. Zamanla yığın sayıları artsa ve taşıma işlemleri gerçekleşse de taşınan yığınlar genellikle boştur; bu da dengeli yığın sayılarına ancak dengesiz verilere neden olur. Bunu düzeltmek için parça anahtarı olarak yüksek kardinaliteli bir alan kullanacak şekilde parçalama stratejinizi yeniden tasarlayın.
Bölme hakkında daha fazla bilgi için bkz. sharding-data-partitioning ve split-chunks-in-sharded-cluster.
Parçalanmış kümedeki parçalanmamış veritabanları
ApsaraDB for MongoDB parçalanmış küme örneği hem parçalanmış hem de parçalanmamış veritabanlarını destekler. Parçalanmamış bir veritabanından gelen tüm veriler tek bir birincil parçada bulunur; bu nedenle bu veritabanı büyükse birincil parçası diğer parçalardan önemli ölçüde daha fazla veri depolayabilir.
Bu sorun verileri bir kaynak mongos kümesinden yeni bir kümeye aktarırken ancak aktarmadan önce hedef kümede parçalamayı yapılandırmayı ihmal ettiğinizde de ortaya çıkabilir.
Bu sorunları gidermek için aşağıdakileri öneririz:
Bir aktarma ile hedef kümeyi başlatıyorsanız parçalamayı başlamadan önce tasarlayın ve etkinleştirin.
Yaklaşık olarak eşit boyutta çok sayıda parçalanmamış veritabanınız varsa belirli veritabanlarını farklı parçalara taşımak için
movePrimarykomutunu kullanın.Çok büyük bir parçalanmamış veritabanı varsa bunu parçalamanızı veya bağımsız bir çoğaltma kümesi örneğine geçirmenizi öneririz.
Bu durum oluşursa ve yeterli disk alanınız varsa sorunu yok saymayı seçebilirsiniz.
moveChunk işlemlerinden kaynaklanan eşit olmayan disk kullanımı
Bir moveChunk işlemi verileri hedef parçaya yazar ve ardından bunları kaynak parçadan kaldırır. Varsayılan olarak kaldırma işlemi disk alanını serbest bırakmaz. WiredTiger altyapısında her koleksiyonun ayrı veri ve dizin dosyaları vardır ve bu dosyalar silinmediği sürece toplam disk alanı küçülmez. Bu sorun en sık bir süre parçalama tasarımı olmadan çalışan bir kümede parçalama etkinleştirildiğinde ortaya çıkar.
Bu nedenle çok sayıda moveChunk veya belge kaldırma işleminden sonra parçalanmış alanı geri kazanmak için etkilenen parçada bir compact işlemi çalıştırın.
moveChunk hakkında daha fazla bilgi için bkz. migrate-chunks-in-sharded-cluster ve manage-sharded-cluster-balancer.