2016-07-22 12 views
3

Dies ist ein Follow-up zu einem question Ich habe zuvor über DB Connection Pooling Fehler in SQLAlchemy geschrieben.Warum die Größe des DB-Verbindungspools in SQLAlchemy einschränken?

Nach dem SQLAlchemy docs der sqlalchemy.pool.QueuePool.__init__() Methode das folgende Argument:

pool_size - Die Größe des Pools beibehalten Diese standardmäßig auf 5 werden, ist die größte Anzahl von Verbindungen das wird persistent in der Pool gehalten werden. Beachten Sie, dass der Pool ohne Verbindungen beginnt. sobald diese Anzahl der Verbindungen angefordert wird, bleibt die Anzahl der Verbindungen . pool_size kann auf 0 gesetzt werden, um keine Größenbeschränkung anzugeben; zu Pooling deaktivieren, verwenden Sie stattdessen einen NullPool.

Was sind die Nachteile der Einstellung pool_size = 0? Welchen Vorteil hat die Begrenzung der Größe des Verbindungspools? Ist es nur um die Erinnerung zu retten? Die Datenbank sollte sich nicht wirklich darum kümmern, ob eine große Anzahl ungenutzter Verbindungen offen ist, oder?

Antwort

4

Der Hauptnachteil, um die Poolgröße nicht einzuschränken, wäre die Möglichkeit, dass ein außer Kontrolle geratenes Programm zu viele Verbindungen erzeugt.

Sowohl auf Datenbank- als auch auf O/S-Ebene gibt es reale Grenzen für die Anzahl der von der Datenbank unterstützten Verbindungen. Jede Verbindung verwendet zusätzlichen Speicher. Durch die Begrenzung der Poolgröße können Sie Ihre Datenbank sowohl vor Fehlern in Ihrem Programm als auch vor Angriffen auf Ihren Server schützen. Beides kann Ihren Datenbankserver durch zu viele Verbindungen oder zu viel Arbeitsspeicher zum Stillstand bringen.

Unter normalen Umständen sollte der zusätzliche Speicher jeder Verbindung nicht zu viel von einem Problem sein, aber es ist am besten, es auf die maximale Anzahl zu beschränken, von der Sie denken, dass Sie gleichzeitig verwenden (vielleicht plus ein paar für gut messen).