Wie erhöht man das gepufferte Datenlimit?

16

In Ubuntu habe ich eine MongoDB Db-Auflistung mit 1 Million Datensätzen erstellt. Beim Versuch, einen Sortierbefehl für diese Auflistung auszuführen, wird die folgende Fehlermeldung angezeigt:

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

Kann jemand beschreiben, wie das interne Limit erhöht werden kann, damit ich dieses und einige andere umfangreiche Befehle für die Daten ausführen kann?

Jon295087
quelle
Ich bezweifle, dass du kannst. Das Problem liegt wahrscheinlich in Ihrer Aussage: Zeigt EXPLAIN, dass Sie einen INDEX verwenden? Wenn nicht, müssen Sie Ihrer Tabelle einen INDEX hinzufügen.
Rinzwind
Hallo Rinzwind. Ich versuche, die Leistung zu vergleichen, daher versuche ich, die Daten mithilfe von noindex, Primärindex und Sekundärindex auszuführen. Schlagen Sie vor, dass es nicht möglich ist, eine solche Skala ohne Index durchzuführen?
Jon295087
Ah. Nun, ich neige dazu, die Leistung mit EXPLAIN zu untersuchen (sobald EXPLAIN mir keine niedrigen Rekordzahlen liefert, ist die Leistung schlecht). Wahrscheinlich müssen Sie Ihre Datensätze begrenzen, wenn Sie dies so tun möchten.
Rinzwind
Ich habe festgestellt, dass MongoDB ungefähr 25000 Dokumente in diesem Datensatz verarbeitet, aber mit etwas Größerem in Konflikt gerät ... Ich vermute, es ist nur eine Einschränkung der Datenbank? Vielen Dank für Ihre Kommentare.
Jon295087

Antworten:

23

Dies kann an einem Fehler wie SERVER-13611 liegen (stellen Sie also sicher, dass Sie sich auf der neuesten Version befinden), oder daran, dass Sie versuchen, in 2.6 nach einem spärlichen Index zu sortieren. Meistens liegt es jedoch daran, dass Sie einfach versuchen, auch zu sortieren viele Datensätze im Speicher ohne Index.

Das von Ihnen festgelegte Limit ist beabsichtigt und wird hier dokumentiert. Es kann nicht geändert werden. Daher müssen Sie die Ergebnismenge reduzieren oder einen Index usw. verwenden, um die Sortierung durchzuführen.

Update (November 2014): Mit der bevorstehenden Version 2.8 (2.8.0-rc0 zum Zeitpunkt der Veröffentlichung dieses Dokuments) kann diese Einstellung jetzt wie folgt angepasst werden:

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

Der Standardwert ist 32 MB (33554432 Byte) und sollte mit Bedacht angepasst werden. Große In-Memory-Sortierungen können dazu führen, dass Ihre Datenbank zum Stillstand kommt (weshalb es überhaupt eine Beschränkung gab).

Adam C
quelle
"Errmsg": "Keine Option zum Festlegen gefunden, verwenden Sie die Hilfe: true, um Optionen
anzuzeigen
1
Wahrscheinlich verwenden Sie eine andere Version, als für diese Antwort vorgesehen war. Diese wurde vor einiger Zeit geschrieben
Adam C
2

Ich bin auch auf das Problem gestoßen, als ich mehr als 200.000 Datensätze sortiert und paginiert habe. Die einfachste Lösung scheint darin zu bestehen, einen Index (für die Attribute, nach denen Sie sortieren) hinzuzufügen.

max kaplan
quelle