2

注: Postgres 9.x と Django ORM を使用しています

アプリケーションには、トランザクションを開き、いくつかのクエリを実行してから、他のこと (サードパーティ API アクセスなど) を数秒間実行してから、さらにいくつかのクエリを実行する関数がいくつかあります。クエリはそれほど高価ではありませんが、多くのトランザクションを長時間開いていると、最終的にデータベースが停止したり、接続が不足したりするのではないかと心配していました。これは、パフォーマンス面でどれくらい大きな取引ですか?

4

2 に答える 2

3

トランザクションを開いたままにしておくことには、長所と短所があります。

プラス面としては、すべてのトランザクションに諸経費がかかります。1 つのトランザクションでいくつかの関連することを実行できれば、通常はパフォーマンスが向上します。

ただし、途中で行またはテーブル全体のロックを取得します (特に、あらゆる種類の書き込み操作で)。これらは、トランザクションの終了時に自動的に解放されます。他のプロセスが同じリソースを待機する可能性がある場合、トランザクションが開いている間に外部プロセスを呼び出すことは非常に悪い考えです。

ロックを取得する前にサードパーティの API を呼び出し、その後すべてのクエリをすばやく連続して実行できますか?

Postgres Wiki でロックのチェックについて読んでください。

于 2012-09-15T13:22:51.623 に答える
1

正確な答えではありませんが、このプレゼンテーションを十分に推奨することはできません。

DjangoCon US での「仕事ではないときの PostgreSQL」

これは今年の DjangoCon のものなので、ビデオもあるはずです。

さらに、著者のブログをチェックしてください。これは、Postgres 全体、特に django に関する有用な情報の宝庫です。そこでは、トランザクション処理に関する興味深い情報を見つけることができます。

于 2012-09-15T05:00:54.737 に答える