私はpsycopg2(バージョン2.5にアップグレード)を使用している私のpostgresデータベースに対してPythonスクリプトで大きなクエリを実行しています。クエリが終了した後、私はカーソルと接続を閉じ、gcを実行しますが、プロセスは依然として大量のメモリを消費します(正確には7.3GBです)。クリーンアップの手順が欠けていますか?psycopg2大きなクエリの後にメモリがリークする
import psycopg2
conn = psycopg2.connect("dbname='dbname' user='user' host='host'")
cursor = conn.cursor()
cursor.execute("""large query""")
rows = cursor.fetchall()
del rows
cursor.close()
conn.close()
import gc
gc.collect()
ありがとうございます!同じプロセスで上記のコードを2回実行することによってメモリが再利用されることを確認しました。 2回目の実行中にメモリが増加しませんでした。 –
ここで述べたことはすべて正しいものですが、通常はクエリ結果はクライアント側で完全に転送されます( 'fetch *()'ではなく 'execute()')。したがって、 'fetchall()'の代わりに 'fetchmany()'を使うと、Pythonオブジェクトの作成という点でメモリが節約されるかもしれません。 – piro