Ich habe gerade eine MySQL-Shell geschlossen, indem ich auf x an meiner Eingabeaufforderung geklickt habe und ich bin jetzt gespannt, was mit Datenbankverbindungen passiert, wenn Sie das Fenster schließen.Woher weiß MySQL, wenn die Verbindung "vorbei" ist?
Ich weiß, dass der MySQL-Server auf Port 3306 ausgeführt wird. Wenn ich richtig verstehe, wartet der Server auf Verbindungsanforderungen und übergibt sie an einen neuen Thread/verfügbaren Thread zum Verwalten der Verbindung.
Woher weiß der Server, wann die Verbindung beendet wurde, damit der Thread freigegeben oder in einen Pool verfügbarer Threads zurückgesetzt werden kann?
Szenarien wie:
- Blue Screen während einer Verbindung mit einem MySQL-Server auf eine Remote-Verbindung.
- Programm beendet, bevor es eine Verbindungsanforderung aufrufen konnte.
Irgendwann wird das Betriebssystem den tcp-Socket bereinigen, oder mysql wird bemerken, wenn es versucht etwas zu senden und einen Fehler vom Netzwerk-Stack zurückbekommt. –
@MarcB Ich kann mir vorstellen, dass der Worker-Thread irgendeine Art von Abfrage über jedes Intervall ausführt, um zu prüfen, ob die Verbindung aktiv ist. Dies scheint ein wenig teuer zu sein, wenn es viele inaktive Verbindungen gibt. Obwohl ich mir vorstellen kann, dass viele aktive Verbindungen ein Zeichen für größere Probleme beim Zugriff auf die Datenbank sind (da sich nur wenige mit Ihrer Datenbank verbinden und sie für immer offen halten können, werden die meisten Anfragen über spezifische indirekte Anfragen ausgeführt, die etwas tun und trennen). – Dmitry