2016-07-22 55 views
3

これは、questionへのフォローアップです。SQLAlchemyでDB Connection Poolingエラーについて先に投稿しました。SQLAlchemyでDB接続プールサイズを制限する理由

SQLAlchemyのdocsによればsqlalchemy.pool.QueuePool.__init__()方法は、以下の引数を取る:

POOL_SIZE - 5にこの そのする接続の最大数で維持されるプールのサイズ、デフォルト値を永久にプールに に保管してください。プールは接続なしで開始されます。接続番号が になると、接続数は になります。 pool_sizeを0に設定すると、サイズ制限がないことを示すことができます。 プールを無効にするには、代わりにNullPoolを使用します。

pool_size = 0を設定する際の欠点は何ですか?接続プールサイズを制限する利点は何ですか?記憶を保存するだけですか?多数の未使用の接続が開いているかどうかは、データベースが実際に気にするべきではありません。

答えて

4

プールサイズを制限しない主な欠点は、暴走プログラムが多すぎる接続を作成する可能性があることです。

データベースレベルでもO/Sレベルでも、データベースでサポートされる接続数には実質的な制限があります。各接続では追加メモリも使用されます。プールサイズを制限することで、プログラム内のバグやサーバーに対する悪意のある攻撃からデータベースを保護することができます。いずれの場合も、接続数が多すぎるか、メモリが多すぎると、データベースサーバーが停止する可能性があります。

ノーマルの場合、各接続で使用される追加メモリはあまり問題ではありませんが、同時に使用すると思われる最大数に制限することをお勧めします測定)。