Arabelleklenmiş veri limiti nasıl artırılır?


16

Ubuntu içinde 1 milyon kayıt içeren bir MongoDB Db koleksiyonu oluşturdum ve buna karşı bir sıralama komutu çalıştırmaya çalışırken, aşağıdaki hatayı alıyorum:

 "$err" : "Runner error: Overflow sort stage buffered data usage of 33555002 bytes exceeds internal limit of 33554432 bytes",
 "code" : 17144

Herkes ve bu ve diğer bazı büyük ölçekli komutları verilere karşı yürütmek böylece iç sınırı artırmak açıklayabilir misiniz?


Yapabileceğinden şüpheliyim. Sorun muhtemelen ifadenizle ilgilidir: EXPLAIN bir INDEX kullandığınızı gösteriyor mu? Değilse, tablonuza bir INDEX eklemeniz gerekir.
Rinzwind

Merhaba Rinzwind. Performans karşılaştırmak çalışıyorum, bu yüzden noindex, birincil dizin ve ikincil bir dizin kullanarak veri türlü çalıştırmak için arıyorum. Bu ölçeğin bir türünü dizinsiz çalıştırmanın mümkün olmadığını mı düşünüyorsunuz?
Jon295087

Ah. EXPLAIN kullanarak performansı inceleme eğilimindeyim (EXPLAIN bana düşük kayıt sayısı vermez etmez performans kötüdür). Bu şekilde yapmak istiyorsanız, muhtemelen kayıtlarınızı sınırlamanız gerekecektir.
Rinzwind

MongoDB'nin bu veri kümesinde yaklaşık 25000 belge işleyeceğini buldum, ancak daha büyük bir şeyle düşüyor ... Sanırım bu sadece veritabanının bir sınırlaması mı? Yorumlarınız için teşekkür ederim.
Jon295087

Yanıtlar:


23

Bu, SERVER-13611 gibi bir hata nedeniyle olabilir (bu yüzden en son sürümde olduğunuzdan emin olun) veya 2.6'da seyrek bir dizinde sıralamaya çalıştığınız için olabilir , ancak daha çok bunun nedeni sadece sıralamaya çalışmanızdır. bir dizin olmadan bellekte birçok kayıt.

Vurduğunuz belirli sınır kasıtlıdır ve burada belgelenmiştir - değiştirilemez, bu nedenle sonuç kümesini azaltmanız veya sıralamayı gerçekleştirmek için bir dizin vb. Kullanmanız gerekir.

Güncelleme (Kasım 2014): Yaklaşan 2.8 sürümü (bunu yazarken 2.8.0-rc0) şimdi bu ayarın aşağıdaki gibi değiştirilmesine izin veriyor:

db.adminCommand({setParameter: 1, internalQueryExecMaxBlockingSortBytes: <limit in bytes>})

Varsayılan değer 32MiB'dir (33554432 bayt) ve dikkatle ayarlanmalıdır - büyük bellek içi sıralamalar veritabanınızın durmasına neden olabilir (bu yüzden ilk etapta bir sınır vardı).


"errmsg": "ayarlamak için bir seçenek bulunamadı, yardım kullanın: seçenekleri görmek için doğru"
Mohammad Efazati

1
muhtemelen bu cevabın amaçlandığından çok daha farklı bir versiyon kullanıyorsunuz, bu oldukça uzun zaman önce yazılmıştır
Adam C

2

200K + kayıtları sıralarken ve sayfalarken de bu sorunla karşılaştım. En kolay çözüm bir dizin eklemek gibi görünüyor (sıraladığınız özellikler için).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.