|
Datenbank Connection Pooling in 11g
von Ulrike Schwinn, ORACLE Deutschland GmbH
Webbasierende Applikationen haben häufig die Eigenschaft, Datenbankverbindungen und
somit Connection-Ressourcen der Datenbank zu benötigen. Beim Öffnen einer Website
beispielsweise wird eine Datenbankverbindung eingerichtet, nach dem Laden der Website ist die
Verbindung zur Datenbank wieder getrennt. Bei wiederholten weiteren Zugriffen auf diese Website
werden dann erneut Datenbankverbindungen aufgebaut. Dies bedeutet, dass u.U. eine grosse Anzahl
von simultanen Verbindungen (auch Connections) für Webapplikationen in der Datenbank zur
Verfügung gestellt werden müssen. Was hat dies nun mit Ihrer Arbeit als Datenbankadministrator
zu tun?
Die Ressourcen könnten natürlich mit dem Datenbank Ressource Manager beschränkt werden (siehe dazu auch
den Tipp Ressourcen managen mit Database Resource Manager). In der Regel möchte man dies
wahrscheinlich verhindern.
Der Einsatz von Oracle Shared Server kann eine Unterstützung liefern, um diese Anforderungen zu lösen, indem Oracle Server Prozesse
auf der Datenbankseite "shared" zur Verfügung gestellt werden. Sinnvoll ist dies besonders daher, weil
insgesamt weniger Prozesse auf Datenbankseite allokiert werden und somit weniger Ressourcen benötigt werden.
Häufig werden diese Prozesse dann auch längere Zeit gehalten. Was ist allerdings bei vielen kurzen Sessions,
die wie im obigen Fall beschrieben, ihre Datenbankaktivität über mehrere Requests unabhängig vom
"Session State" definieren?
Database Resident Connection Pooling (kurz DRCP), ein neues Feature in Oracle Database 11g, das
standardmässig zur Verfügung steht, addressiert genau diese Problematik auf sehr einfache Art und Weise.
Wie funktioniert nun DRCP? Nach dem Einschalten von DRCP wird automatisch eine Menge von dedizierten
Datenbankservern zu sogenannten Pooled Servern zusammengefasst. Diese können dann gemeinsam von mehreren
Applikationen genutzt werden. Die Clients sind dabei fest mit einem Broker verbunden, der die Zuweisung zu
einem Server im Pool regelt. Nach dem Verbindungsaufbau ist das Verhalten vergleichbar mit einer
dedizierten Serververbindung - so wird auch PGA Memory statt SGA Memory verwendet.
Wird zum Beispiel die Verbindung von der Clientseite zum Pooled Server beendet, besteht die Verbindung zum Broker weiterhin.
Ein weiterer Unterschied zur Shared Server Architektur ist die Tatsache, dass Server im Pool oder Clients,
die "idle" sind, nach einer gewissen einstellbaren Zeit beendet werden.
Folgende Graphik zeigt einen Architekturüberblick.
Für eine größere Ansicht auf das Bild klicken.
Danach können Applikationen, die kein eigenes Connection Pooling zur Verfügung stellen, beispielsweise in PHP oder
Perl implementierte Applikationen, von dieser Funktionalität profitieren, um ihre Connection-Ressourcen
zu verringern.
Die Funktionalität ist datenbankseitig durch das PL/SQL Paket DBMS_CONNECTION_POOL implementiert. DRCP wird dabei
mit START_POOL gestartet und STOP_POOL gestoppt. Zu Beginn ist DRCP nicht eingeschaltet und kann, wie im
Listing zu sehen ist, folgendermaßen gestartet werden.
Nun können die Clients das DRCP nutzen. Dazu ist beispielsweise nur die Angabe von "POOLED" im Easy Connect String notwendig.
Soll im Connectstring ein TNS Alias verwendet werden, wird die tnsnames.ora Datei um den Eintrag (SERVER=POOLED)
erweitert.
Eine Parametrierung der Poolgrösse bzgl. der Anzahl der maximalen bzw. minimalen Sessions, des Timeouts usw.
kann mit der Prozedur CONFIGURE_POOL oder ALTER_POOL (bei Änderung von einzelnen Parametern) des
Package DBMS_CONNECTION_POOL durchgeführt werden. So gibt der Parameter MAX_THINK_TIME
den Zeitraum an, nach dem Clients, die "idle" sind, beendet werden. In folgendem Listing wird die MAX_THINK_TIME
auf 300 gesetzt. Erfolgt nun nach 5 Minuten keine Datenbankanforderung vom Client, muss der Client die Verbindung zum
Server aufgeben und erhält eine Fehlermeldung.
Da es im Moment nur einen Pool mit Namen SYS_DEFAULT_CONNECTION_POOL gibt, kann das erste Argument leer bleiben. Mehr Information
dazu findet sich im Handbuch Oracle Database PL/SQL Packages and Types Reference 11g Release 1 (11.1).
Möchte man die Konfiguration des Pools monitoren, nutzt man am besten folgende Abfrage:
Die Statistiken über die laufenden Verbindungsaktivitäten lassen sich dann über die V$CPOOL_STATS monitoren.
Dabei gibt beispielsweise NUM_OPEN_SERVERS die Anzahl der Server im Pool und NUM_REQUESTS die Anzahl der Client
Anfragen an.
Mehr zu diesem Thema bzw. zu weiteren Themen rund um die Datenbank lesen Sie in den nächsten Ausgaben ...
Zurück zur Community-Seite
|