Der DB Connection Pool in womodo
Jedesmal wenn womodo auf einen Datenbank Server zugreift um Daten/Informationen abzufragen, verwendet womodo eine "Datenbank-Connection".
Das Aufbauen und Schließen einer solchen TCP Connections benötigt Zeit und Resourcen auf dem Server. Deshalb ist es eine Gute Idee, dies so selten wie möglich zu machen.
Dafür kann im womodo je SQL-Server ein "DB Connection Pool" eingerichtet und verwendet werden.
So arbeitet der womodo Connection Pool
Der Connection Pool wird im wesentlichen über 3 Parameter gesteuert:
- Max Connections (Default 100)
- Max idle Connections (Default 80)
- Min Idle Connections (Default 10)
Jede womodo Datenbank Server Konfiguration, für die ein Connection Pool eingerichtet ist, erzeugt initial eine Anzahl von "Min idle Connections" zum SQL-Server. Der Default ist 10, kann aber bei Bedarf angepaßt werden.
Jederzeit verfügbar
Diese Idle Connections stehen den Anwendungen (Websites) zur freien Verwendung zur Verfügung. Wenn immer eine Anwendung eine Connection benötigt, greift sie auf den bestehenden Pool zu, ohne daß neue Connections erzeugt werden müssen. Wenn die Connection nicht mehr benötigt wird, wird sie nicht geschlossen, sondern an den Pool zurückgegeben.
Wenn es mal mehr braucht
Werden bei hoher Last mehr als die konfigurierten "Min Idle" Connections benötigt, werden neue Connections erzeugt und dem Pool hinzugefügt, solange der Wert vom "Max Connections" (Default 100) nicht erreicht ist. Ist der Wert erreicht, pausiert die Anwendung so lange, bis wieder Idle Connections im Pool frei geworden sind.
Wenn Connections an den Pool zurückgegeben werden wird geprüft, ob die Anzahl der Idle Connections den Wert "Max Idle Connections" (Default ist 80) überschreitet. Wenn ja, wird die Connection direkt geschlossen - also nicht mehr als Idle Connection im Pool gehalten.
Entsorgung
Ein Hintergrundprozeß prüft ständig, welche Idle Connections länger als 5 Minuten nicht mehr verwendet wurden (auch dieser Wert ist einstellbar). Diese Connections werden dann geschlossen und ggf. - wenn es weniger als Min Idle Connections gibt - neue erzeugt.
Das sorgt dafür, daß bei nachlassender Last die Anzahl der Idle Connections im Pool wieder auf den Wert "Min Idle Connections" zurückfällt.
Test-On-Borrow
Connections werden nicht nur im Hintergrund geprüft, sondern auch bei jeder Pool-Anfrage (Borrow / Ausleihen). Das sorgt dafür, daß bei einem Neustart des SQL-Servers oder bei temporären Netzproblemen selbstständig alte "invalide" Connections entsorgt und neue "valide" Connections aufgebaut werden.
Empfehlungen
Die optimalen Parameter für den Connection Pool hängen von den betriebenen Anwendungen und der erwarteten Serverlast ab.
Als Wert für "Min Idle" empfehlen wir die doppelte Anzahl der auf dem SQL-Server betriebenen Anwendungen. Werden also 10 Websites betrieben, sollte "Min Idle" auf 20 eingestellt sein. Der Grund ist, daß es eine Reihe von Hintergrundprozessen wie etwa das Erzeugen von Datei-Derivaten oder das aktualisieren des Volltextindex gibt, die unabhängig von Zugriffen auf die Websites regelmäßig Connections benötigen.
Einstellungen am SQL-Server
Auch am SQL-Server selbst kann/muß eingestellt werden, wieviele Connections dieser maximal zur Verfügung stellt. Dieser Wert muß größer als "Max Connections" sein, damit das System auch unter Last funktioniert. Der Default-Wert bei MySQL beträgt 150, so daß der Default von 100 für "Max Connections" passend dazu gewählt ist.
Bei hoch belasteten Servern können beide Werte erhöht werden.
Replikation
Wird mit Replikation gearbeitet ist zu beachten, daß der SQL-Server nicht nur Connections für den Betrieb der Websites benötigt, sondern zusätzliche für die Replikation.
Die vom SQL-Server zur Verfügung gestellten Connections sollten dann um die Anzahl der replizierten Websites erhöht werden.
Betrieb im Cluster
Greifen mehrere womodo CMS Server in einem Cluster auf einen singulären SQL-Server zu, muß auch das entsprechend in den SQL-Server-Einstellungen berücksichtigt werden.
Update in womodo 7.11.4
Leider haben wir festgestellt, daß der Connection Pool in womodo < 7.11.4 faktisch nicht verwendet wurde. Das Test-On-Borrow Konzept sorgte aufgrund einer fehlerhaften SQL-Abfrage dafür, daß alle Connections als invalide erkannt und entsorgt wurden. Als Effekt war der Connection Pool faktisch immer leer und neue Connections mußten vor jeder Verwendung stets neu erstellt werden.
Dies haben wir in womodo 7.11.4 korrigiert. Der Connection Pool arbeitet nun, wie oben beschrieben.
Zudem haben wir den Admin Client um eine Monitoring Ansicht erweitert, die den aktuellen Status des Pools anzeigt.