Bagaimana cara meningkatkan batas data yang disangga?

16

Dalam Ubuntu saya telah membuat koleksi Db MongoDB yang berisi 1 juta catatan, dan ketika mencoba menjalankan perintah pengurutan terhadapnya, saya mendapatkan kesalahan berikut:

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

Adakah yang bisa menjelaskan bagaimana cara meningkatkan batas internal sehingga saya dapat menjalankan ini dan beberapa perintah skala besar lainnya terhadap data?

Jon295087
sumber
Saya ragu Anda bisa. Masalahnya mungkin dengan pernyataan Anda: apakah EXPLAIN menunjukkan Anda menggunakan INDEX? Jika tidak, Anda perlu menambahkan INDEX ke tabel Anda.
Rinzwind
Hai Rinzwind. Saya mencoba membandingkan kinerja, jadi saya ingin menjalankan berbagai data menggunakan noindex, indeks primer, dan indeks sekunder. Apakah Anda menyarankan untuk menjalankan skala semacam ini tanpa indeks?
Jon295087
Ah. Yah saya cenderung untuk memeriksa kinerja dengan menggunakan EXPLAIN (segera setelah EXPLAIN tidak memberi saya jumlah catatan rendah kinerja buruk). Anda mungkin perlu membatasi catatan Anda jika ingin melakukannya seperti ini.
Rinzwind
Saya telah menemukan bahwa MongoDB akan memproses sekitar 25000 dokumen dalam dataset ini, tetapi jatuh dengan sesuatu yang lebih besar ... Saya kira itu hanya keterbatasan database? Terima kasih atas komentar anda
Jon295087

Jawaban:

23

Ini dapat terjadi karena bug seperti SERVER-13611 (jadi pastikan Anda berada di versi terbaru), atau karena Anda mencoba untuk mengurutkan pada indeks jarang di 2.6 , tetapi lebih biasanya karena Anda hanya mencoba mengurutkan juga banyak catatan dalam memori tanpa indeks.

Batas spesifik yang Anda tekan adalah disengaja dan didokumentasikan di sini - itu tidak dapat diubah, jadi Anda perlu mengurangi set hasil, atau menggunakan indeks dll untuk melakukan pengurutan.

Pembaruan (November 2014): Rilis 2.8 mendatang (2.8.0-rc0 saat menulis ini) sekarang memungkinkan pengaturan ini untuk di-tweak, sebagai berikut:

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

Nilai defaultnya adalah 32MiB (33554432 bytes) dan harus disesuaikan dengan hati-hati - jenis memori yang besar dapat menyebabkan database Anda terhenti (itulah sebabnya ada batasan di tempat pertama).

Adam C
sumber
"errmsg": "tidak ada opsi yang ditemukan untuk diatur, gunakan bantuan: true untuk melihat opsi"
Mohammad Efazati
1
kemungkinan Anda menggunakan versi yang jauh berbeda dari yang dimaksudkan untuk jawaban ini, ini ditulis beberapa waktu lalu
Adam C
2

Saya mengalami masalah juga ketika menyortir dan membuat halaman 200K + catatan. Solusi termudah adalah menambahkan indeks (untuk atribut yang Anda sortir.

maks kaplan
sumber