2012-04-03 27 views
8

SQLAlchemyの接続プーリングについて既読です(既定値は5で、既定では10にオーバーフローします)。接続プールが使い果たされるとどうなりますか?

キャッシュされた接続の数を超えた場合、どうなりますか?空き接続が利用可能になるか、プールに入らない新しい接続が作成されるまで、後続の要求はキューに入れられますか?

また、プールがデフォルト値の最大10まで「オーバーフロー」すると、未使用の接続はどうなりますか?これらの接続は、デフォルトの時間の後(標準プールの場合のように)切断されるのですか、それとも標準プールより積極的にリリースされますか?

答えて

13

パフォーマンス向上のためにデータベース接続を管理するQueuePoolについて読んでいます。後で再利用したい場合に備えて、開いているアイドル状態の接続を保持することでこれを行います。開いている接続の数はpool_size = 5(デフォルト)です。 6番目の接続を開くと、キュー内の接続の1つがアイドル状態の間は閉じられます。アイドル状態になっていない場合、QueuePoolはmax_overflow = 10(デフォルト)まで追加のキューを開きます。それ以上あればエラーになります。 ただし、これらのパラメータは両方とも設定可能です。プール接続を無制限にするには、pool_size = 0を設定します。 The source is here

+0

無制限の場合はpool_size = -1です。 – zzzeek

+1

hmm、docsへのリンクでは、QueuePool .__ init__を見て、docstringは "' 'pool_size''が0に設定され、サイズ制限がないことを示しています。" –

+0

あなたは正しく私がpool_recycleを見ていた – zzzeek

4
SQLAlchemy docsパー

チェックアウト接続の数がpool_sizeで設定したサイズに達すると、追加の接続がこの制限まで返されます。 これらの追加の接続がプールに戻されると、接続が切断されて破棄されます。プールが許可する同時接続の総数はpool_size + max_overflowであり、プールが許可する "スリープ"接続の総数はpool_sizeです。

したがって、オーバーフローした接続は通常のスリープ接続よりも積極的に解放されます。あなたが実際にQueuePool._do_get()のソースを見れば

、あなたはそれが上げることがわかりますTimeoutError接続数がプールのサイズ+オーバーフローに等しく、何も接続がconnect()が呼び出された後すぐにプールに戻されていないとき。

関連する問題