MySQL: Connection nach jeder Abfrage wieder schließen?
Sven
- datenbank
0 bleicher
Tag,
mal ne etwas dumme Frage *lach* Ich hab bisher die MySQL-Connection von PHP aus nie beendet - sie wurde aufgebaut und dann folgten im Script die Abfragen... vielleicht noch mehr Abfragen und noch mehr Abfragen... und wenn man ne andere Seite aufgerufen hat, wurde wieder eine Verbindung aufgebaut.
Ist das schlecht? Sollte ich besser nach jeder Abfrage die Verbindung wieder schließen, oder wirkt sich das nachteilig auf die Geschwindigkeit aus?
Lg
Sven
Grüße,
Ist das schlecht? Sollte ich besser nach jeder Abfrage die Verbindung wieder schließen, oder wirkt sich das nachteilig auf die Geschwindigkeit aus?
habe mal gelesen dass die verbindung nach der ausführung des scripts automatisch beendet wird, das manuelle schließen ist aber standartkonform sozusagen "guter ton" - ich tue es aber auch nie ;p
MFG
bleicher
Moin!
Ist das schlecht? Sollte ich besser nach jeder Abfrage die Verbindung wieder schließen, oder wirkt sich das nachteilig auf die Geschwindigkeit aus?
habe mal gelesen dass die verbindung nach der ausführung des scripts automatisch beendet wird, das manuelle schließen ist aber standartkonform sozusagen "guter ton" - ich tue es aber auch nie ;p
Es ist deutlich unperformanter, in einem einzelnen Skript vor jeder Abfrage die Verbindung zur Datenbank herzustellen und sie nachher direkt wieder zu schließen. Der Verbindungsaufbau kostet Zeit, außerdem löscht der zwischenzeitliche Abbau der Verbindung Caching-Puffer (relevant, falls z.B. die gleiche Abfrage wiederholt wird), und wichtige Features würden auch nicht mehr funktionieren (die Abfrage der gerade eingefügten ID durch ein INSERT ist an die bestehende Verbindung gebunden).
Es ist auf der anderen Seite jedoch eine potentiell gute Idee, die Verbindung (auch automatisch durch PHP) zu beenden, weil dadurch Ressourcen der Datenbank freigegeben werden, die von anderen Instanzen oder Threads des Webservers mit anderen Skriptaufrufen wieder benötigt werden. Eine Datenbank unterstützt genausowenig wie der Webserver unlimitiert viele parallele Verbindungen. Deshalb ist es beispielsweise keine gute Idee, pauschal für "mehr Performance[TM]" einfach pconnect() statt connect() einzusetzen.
- Sven Rautenberg
Hallo,
Es ist auf der anderen Seite jedoch eine potentiell gute Idee, die Verbindung (auch automatisch durch PHP) zu beenden, weil dadurch Ressourcen der Datenbank freigegeben werden, die von anderen Instanzen oder Threads des Webservers mit anderen Skriptaufrufen wieder benötigt werden.
Okay, vielen Dank! Damit hat sich das Thema fast auch schon wieder erledigt ;) Macht es denn Sinn, am Ende eines Scripts pauschal ein close einzufügen? Wenn ich mehrere Scripts habe, die jeweils Verbindung zur gleichen Datenbank aufnehmen... verwenden die dann die gleiche Verbindung, oder wird die Verbindung sowieso nach Ende des Scripts beendet?
Lg
Sven
Moin!
Macht es denn Sinn, am Ende eines Scripts pauschal ein close einzufügen?
Pauschal nein, du mußt schon konkret deine geöffneten Verbindungen benennen, um sie zu schließen.
Wenn ich mehrere Scripts habe, die jeweils Verbindung zur gleichen Datenbank aufnehmen... verwenden die dann die gleiche Verbindung, oder wird die Verbindung sowieso nach Ende des Scripts beendet?
Die verwenden jeweils eine eigene Verbindung. Und logischerweise wird die am Skriptende automatisch beendet.
Sofern du also kein Ressourcenproblem mit deinem Skript hast, zuwenig Speicher o.ä., mußt du dich um die Freigabe nicht mehr benötigter Ressourcen erstmal nicht kümmern.
- Sven Rautenberg
Sofern du also kein Ressourcenproblem mit deinem Skript hast, zuwenig Speicher o.ä., mußt du dich um die Freigabe nicht mehr benötigter Ressourcen erstmal nicht kümmern.
Doch, genau das ist mein Problem, die Ressourcen sind knapp.
So ganz klar ist mir das noch nicht: Wenn ich jetzt Seite1 hab, die ruft Daten aus Tabelle X ab. Und dort gibt es einen Link, der führt zu Seite 2. Diese ruft aus der gleichen Datenbank, aber einer anderen Tabelle wieder Daten ab.
Hat dann das Script in Seite 1 die Verbindung beendet? Oder wird für Seite 2 eine neue Verbindung geöffnet, und die alte bleibt ebenfalls offen, bis sie aufgrund eines Timeouts beendet wird?
DANN würde es wohl Sinn machen, die Verbindung explizit am Ende des Scripts von Seite 1 zu beenden. Wenn sie aber beim Seitenwechsel sowieso ordnungsgemäß beendet wird, ohne auf den Timeout zu warten, dann brauch ich das natürlich nicht.
Lg
Sven
Hi,
Doch, genau das ist mein Problem, die Ressourcen sind knapp.
Und die Kenntnisse offenbar noch knapper ...
So ganz klar ist mir das noch nicht: Wenn ich jetzt Seite1 hab, die ruft Daten aus Tabelle X ab. Und dort gibt es einen Link, der führt zu Seite 2. Diese ruft aus der gleichen Datenbank, aber einer anderen Tabelle wieder Daten ab.
Hat dann das Script in Seite 1 die Verbindung beendet?
Warum liest du das nicht mal nach?
"Die Verbindung zum Datenbank-Server wird geschlossen, sobald die Ausführung des PHP-Skripts beendet ist oder vorher explizit die Funktion mysql_close() aufgerufen wird."
Oder wird für Seite 2 eine neue Verbindung geöffnet,
Andernfalls koennte diese "Seite" nicht mit der Datenbank reden.
und die alte bleibt ebenfalls offen, bis sie aufgrund eines Timeouts beendet wird?
Nei-en.
DANN würde es wohl Sinn machen, die Verbindung explizit am Ende des Scripts von Seite 1 zu beenden. Wenn sie aber beim Seitenwechsel sowieso ordnungsgemäß beendet wird, ohne auf den Timeout zu warten, dann brauch ich das natürlich nicht.
Und wenn du dir mal angewoehnst, was selber nachzulesen, dann brauchst du fuer solche Kinkerlitzchen auch nicht mehr "dumm" fragen.
MfG ChrisB