Die betreffende Tabelle enthält ungefähr zehn Millionen Zeilen.Warum durchläuft ein großes Django QuerySet große Mengen an Speicher?
for event in Event.objects.all():
print event
Dies führt dazu, dass die Speicherbelegung stetig auf 4 GB oder mehr steigt, wodurch die Zeilen schnell gedruckt werden. Die lange Wartezeit vor der ersten Zeile überraschte mich - ich erwartete, dass sie fast sofort drucken würde.
Ich versuchte auch Event.objects.iterator()
, die auf die gleiche Weise verhielten.
Ich verstehe nicht, was Django in den Speicher lädt oder warum es das tut. Ich erwartete, dass Django die Ergebnisse auf Datenbankebene durchläuft, was bedeutet, dass die Ergebnisse ungefähr mit einer konstanten Rate gedruckt würden (anstatt auf einmal nach einer langen Wartezeit).
Was habe ich missverstanden?
(ich weiß nicht, ob es relevant ist, aber ich bin mit PostgreSQL.)
Auf kleineren Maschinen dieses auch sofort verursachen kann "getötet" an die django Shell oder Server – Stefano