Die Erweiterung mysqli und persistente (bestÀndige) Verbindungen

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 mysqli unterstĂŒtzt persistente Verbindungen, wenn sie entweder den MySQL Native Driver oder die MySQL Client Library verwendet.

add a note

User Contributed Notes

There are no user contributed notes for this page.