2017-03-31 2 views
1

Ich wechselte zu PDO dauerhafte Verbindungen. Ich bin auf Situationen gestoßen, in denen MySQL (aufgrund von Inaktivität) eine Verbindung (am Ende) korrekt schließt und PDO sie nicht annimmt, die Verbindung in ihrem Cache verfügbar hält und von diesem Zeitpunkt an versucht, diese Verbindung zu verwenden in einem Fehler.Schließt PDO jemals persistente Verbindungen?

Von dem, was ich gelesen habe, ist dieses Verhalten "per Design" (für mich sieht es aus wie PDO ist aus dem Weg, nicht dauerhafte Verbindungen zu unterstützen).

Wie auch immer, ich würde gerne wissen, ob PDO jemals eine Verbindung in seinem Pool schließen würde. Ich bekomme es, dass es nicht den Zustand der Verbindung überprüft, aber gibt es irgendeine Art von Timer oder periodische Bereinigung, konfigurierbar oder fest codiert?

+0

Sie müssen die Verbindung in PHP von Zeit zu Zeit manuell anpingen, wenn Sie eine funktionierende Verbindung zu Ihrer Datenbank aufrechterhalten möchten. Die Zeit, in der MySQL die inaktive Verbindung schließt, kann in der MySQL-Konfiguration geändert werden –

+0

was ist mit einer bestimmten Fehlermeldung, die Sie bekommen? –

+0

@YourCommonSense Der Fehler, den ich bekomme, wenn ich versuche, eine Verbindung zu verwenden, die geschlossen wurde, ist etwas wie "MySQL Server war weg". – obe

Antwort

1

Man sollte sich keine Sorgen über die Persistenz einer Verbindung machen.

Wenn Sie eine Webseite erstellen, sollte sie lange dauern, bevor die Verbindung abläuft.

Wenn Sie eine lang laufende Anwendung haben, die die Datenbank nicht für große Zeiträume berührt, denken Sie darüber nach, den Code neu zu ordnen oder zu schließen und wieder zu öffnen oder zu entdecken, dass er geschlossen und wieder geöffnet wurde.

Beachten Sie, dass eine Verbindung aus einer Vielzahl von Gründen geschlossen werden kann - viele im Zusammenhang mit Schluckauf im Netzwerk. Daher sollte Ihre Anwendung bereit sein, sich von einer geschlossenen Verbindung zu erholen, unabhängig davon, wie "dauerhaft" sie ist.

"Verbindungspooling" wird auf vielen Ebenen gehandhabt - in der Client-Bibliothek, im "Proxy-Server", sogar im MySQL-Server. Sie alle verhalten sich anders.

Verbindungspooling ist nicht so nützlich. Praktisch jedes Leistungsproblem, das ich gejagt habe, hat nicht mit der Zeit zu tun, die es braucht, um eine Verbindung herzustellen.

Andere RDBMS-Anbieter hatten furchtbar langsame Connect-Zeiten, was die Branche dazu veranlasste, Connection-Pooling und persistente Verbindungen zu erfinden. Aber MySQL braucht das nicht.

Es gibt mehrere Zeitüberschreitungen, die zum Schließen einer Verbindung führen können. Sie sind dem DBA/SE/Cloud-Anbieter ausgeliefert, auf welche Werte sie eingestellt sind.

PDO ist nur eine von vielen Schichten, Ihre Frage ist also zu eng. Ich hoffe, ich habe eine breitere Antwort gegeben.

+1

Ich schätze den Aufwand und die Details, aber es beantwortet nicht wirklich meine Frage (die, so eng sie auch war, war über spezifisches PDO Verhalten (oder Mangel an)). Ein paar Anmerkungen: Bei aktiviertem SSL dauern MySQL-Verbindungen viel länger.Während ich zustimmen würde, dass jedes (oder fast jedes) Leistungsproblem durch eine Änderung der Entwurfs- oder Codierpraktiken gelöst werden kann, argumentiere ich, dass es gültige Geschäftssituationen gibt, in denen der Wechsel zu permanenten PDO-Verbindungen den benötigten Vorteil bringt und der Änderung der Architektur vorzuziehen ist . – obe

+0

In Bezug auf die Handhabung Fehler anmutig: Es gibt einen Unterschied zwischen der Behandlung eines zufälligen Ereignisses (in dem es OK sein kann, nur einige Fehlermeldung an den Benutzer zurück und sogar vorzuziehen über verschiedene Gründe wieder zu verbinden), und diese Fehler unvermeidlich routinemäßig (Nur weil die zugrunde liegende Bibliothek Verbindungen nicht regelmäßig zurücksetzt). – obe

Verwandte Themen