実行中のデータベースで実行すると{integer, boolean, integer, varchar(255), varchar(255), bigint, text}
、約70 ミリ秒で120 行を返す postgresql-query がありますpsql
。
同じマシンでpython/django を使用すると、実行に10 秒django.db.connection.cursor.execute()
かかります。
すべての行を配列に入れてみましたが、単一の文字列 (18k 文字ですが、最初の 500 文字のみを返すのに同じ時間がかかります) が返されますが、ゲインはありません。
Python 内およびデータベース内からクエリを実行する際に、なぜこのような劇的な速度低下が発生するのかについてのアイデアはありますか?
編集
関数を psql でタイムリーに実行するには、work_mem を増やす必要がありました。他の関数/クエリは同じパターンを示しません。psql と python の違いはわずか数ミリ秒です。
編集
work_mem を 1MB に削減すると、psql と django シェルで同様の数値が示されます。django が work_mem に設定されたメモリを使用していない可能性がありますか?
編集
うーん。問題は、psql に設定された work_mem がグローバルに有効ではないことでした。関数にメモリを設定すると、呼び出しがタイムリーになります。構成ファイルでこれを設定すると、グローバルに機能すると思います。