Postgresql veritabanını sorgulamak ve tüm satırları yaklaşık 380M satır içeren bir tablodan işlemek için psycopg2 kullanıyorum. Tümü tamsayı olmak üzere yalnızca 3 sütun (id1, id2, count) vardır. Ancak, aşağıdaki açık seçik sorguyu çalıştırdığımda, Python işlemi işletim sistemi tarafından öldürünceye kadar daha fazla bellek tüketmeye başlar.Psycopg2 büyük seçme sorgusunda yukarı belleği kullanır
az bir çalışma örneği (yani mydatabase bulunan ve bir tablo olarak adlandırılan mytable içerir varsayılarak): Bu noktada
import psycopg2
conn = psycopg2.connect("dbname=mydatabase")
cur = conn.cursor()
cur.execute("SELECT * FROM mytable;")
program belleğini alıcı başlar.
Bir baktım ve Postgresql işlemi iyi çalışıyor. İyi bir işlemci ve iyi bir miktar bellek kullanıyor.
Psycopg2'nin, seçimlerden tüm sonuçları arabelleğe almaya çalışmadan bir yineleyici döndürmesini beklerdim. Sonra tüm satırları işlemek için cur.fetchone()
'u tekrar tekrar kullanabilirim.
Peki, kullanılabilir belleği kullanmadan 380M satır tablosundan nasıl seçim yapabilirim?
Harika, bunun için teşekkürler! Açıklamayı biraz iyileştirmek için birkaç düzenleme yapacağım ve kabul ediyorum. – Carl
Bu imleç PostgreSQL sunucusunda veya Python istemcisinde var mı? DECLARE imleç_adı SELECT * SEÇİMİ CURSOR; –
@FrankHeikens Her şey bu durumda Python istemci tarafından yapılır. İmleç sunucu tarafında yok. – Carl