私はこのようなQuerySetをDjangoに持っています。Django - "for" on QuerySetで大量のメモリを使用する
j = piosenki.objects.select_related('projekt__postac').distinct().exclude(typ__in=["live", "remix"]).filter(piosenki__plyta__status=1, piosenki__plyta__typ='s')
.extra(select={ 'ocena' : 'dobroc', 'plyta' : 'SELECT plyta_id FROM plyty_piosenki INNER JOIN plyty_plyty ON plyty_plyty.id = plyty_piosenki.plyta_id WHERE piosenka_id = muzyka_piosenki.id AND plyty_plyty.typ = \'s\' ORDER BY plyty_plyty.id DESC LIMIT 1' })
単純に "ID" メモリをプリントfor文ととIループ処理が完了するまで、成長し続けて...
[1286986.701097] Killed process 4627 (python2.6) total-vm:731872kB, anon-rss:635724kB, file-rss:268kB
[1286986.768701] python2.6: page allocation failure. order:0, mode:0x201da
[1286986.768705] Pid: 4627, comm: python2.6 Not tainted 2.6.39-gentoo-r2 #1
任意の提案は?私はDjangoが結果をメモリにロードすることを知っていますが、Postgresはテーブルのサイズを約200 MBと報告しています。
テーブルの大きさはどのくらいですか?また、あなたのループのためのあなたのdjangoテンプレートコードを投稿することができますか? – Jordan
"しかし、Postgresはテーブルのサイズを約200 MBと報告しています。だから、" j:print w.idで私は簡単です。 – ThomK
すべての行を選択していますか?また、いくつかの結合と余分なものがあるため、何らかの理由で結合された表が200MBを超えることがあります。 FWIWは、死ぬと最大750MBになるようです。 – Jordan