Die Idee hinter persistenten Verbindungen ist, dass eine Verbindung zwischen einem Client-Prozess und einer Datenbank von einem Client-Prozess mehrfach verwendet werden kann, anstatt jedes Mal neu erstellt und zerstört zu werden. Da ungenutzte Verbindungen zwischengespeichert werden und zur Wiederverwendung bereitstehen, reduziert sich der Mehraufwand, der entsteht, wenn jedes Mal eine neue Verbindung erstellt werden muss.
Im Gegensatz zur Erweiterung mysql bietet mysqli keine eigene Funktion zum
Ăffnen von persistenten Verbindungen. Um eine persistente Verbindung zu
öffnen, muss dem Hostnamen beim Aufbau der Verbindung das PrÀfix
p: vorangestellt werden.
Das Problem bei persistenten Verbindungen ist, dass sie von Clients in
unvorhersehbaren ZustÀnden hinterlassen werden können. Zum Beispiel könnte
eine Tabellensperre aktiviert werden, bevor ein Client unerwartet beendet
wird. Ein neuer Client-Prozess, der diese persistente Verbindung
wiederverwendet, erhÀlt die Verbindung as is
(so wie sie
ist). Der neue Client-Prozess mĂŒsste alle notwendigen AufrĂ€umarbeiten
durchfĂŒhren, bevor er die persistente Verbindung sinnvoll nutzen kann, was
den Aufwand fĂŒr den Programmierer erhöht.
FĂŒr diese AufrĂ€umarbeiten ist in der persistenten Verbindung der
Erweiterung mysqli jedoch ein entsprechender Code
enthalten. Die AufrÀumarbeiten, die von mysqli
durchgefĂŒhrt werden, umfassen:
das Rollback aktiver Transaktionen
das SchlieĂen und Löschen temporĂ€rer Tabellen
das Entsperren von Tabellen
das ZurĂŒcksetzen von Sessionvariablen
das SchlieĂen vorbereiteter Anweisungen (geschieht bei PHP immer)
das SchlieĂen von Handlern
die Freigabe von Sperren, die mit GET_LOCK() gesetzt wurden
Dadurch wird sichergestellt, dass sich eine persistente Verbindungen in einem bereinigten Zustand befindet, wenn sie aus dem Verbindungs-Pool abgerufen wird, bevor der Client-Prozess sie verwendet.
Die Erweiterung mysqli erledigt diese Bereinigung durch
den automatischen Aufruf der C-API-Funktion
mysql_change_user().
Die automatisierte Bereinigung hat jedoch Vor- und Nachteile. Der Vorteil ist, dass der Programmierer sich nicht mehr darum kĂŒmmern muss, den Bereinigungscode hinzuzufĂŒgen, da er automatisch aufgerufen wird. Der Nachteil ist jedoch, dass der Code eventuell etwas langsamer sein könnte, da er zur DurchfĂŒhrung der Bereinigung jedes Mal ausgefĂŒhrt werden muss, wenn eine Verbindung aus dem Verbindungs-Pool abgerufen wird.
Der Code fĂŒr die automatische Bereinigung kann abgeschaltet werden, indem
PHP mit der Option MYSQLI_NO_CHANGE_USER_ON_PCONNECT
kompiliert wird.
Hinweis:
Die Erweiterung
mysqliunterstĂŒtzt persistente Verbindungen, wenn sie entweder den MySQL Native Driver oder die MySQL Client Library verwendet.