Warum DB-Verbindung schließen?

Hi,

ich stelle mir grade die Frage, warum man nach einer Abfrage (z.B. mit PHP auf MySQL) die Verbindung schließen sollte?
Ist es wegen der Sicherheit, dass jemand die noch nicht beendete Verbindung missbrauche könnte??

Danke

PS: In der Regel ist der DB-Server NICHT der Server, von dem aus auf die DB zugegriffen wird, oder?

Auch hallo.

Ist es wegen der Sicherheit, dass jemand die noch nicht
beendete Verbindung missbrauche könnte??

Unter anderem. Ausserdem verbraucht die offene Verbindung Resouren.

PS: In der Regel ist der DB-Server NICHT der Server, von dem
aus auf die DB zugegriffen wird, oder?

Je nach Datenbank und deren Einstellung kann man von jedem Rechner aus auf dieselbe zugreifen. Das muss kein Server sein.

mfg M.L.

hi

ist zwar schon beantwortet worden, ich möchte es aber mal präzisiern:

eine offene connection benötigt zumindest einen filehandle für die netzverbindung und zusätzliche eine gewisse menge an hauptspeicher. je nach db-system (in deinem fall also mysql - nur da bin ich kein experte) kann man pro connection ev. noch einen betriebssystemprozess offen haben.

all das kann bewirken, dass man recht schnell in einen engpass reinläuft, wenn man connections nicht sauber schließt. im linux z.b. darf ein normaler benutzer standardmässig nur 1000 filehandles offen halten (gilt zumindest für einen standard-sles9-installation, andere distributionen handhaben das ev. anders). unter linux kann ein filehandle recht viel sein - auch eine netzverbindung. kann also sein, dass deine anwendung auf einmal nicht mehr funktioniert weil keine freien filehandles mehr da sind - obwohl noch massig hauptspeicher etc. verfügbar wären.

abgesehen davon gehört es einfach nicht zu einem guten programmierstil, ressourcen unnötig lange zu blockieren. programme, die so programmiert sind, neigen stark dazu, nicht gut zu skalieren - sie laufen bei geringer userlast recht gut und knicken bei steigender userlast dann drastisch ein. „sauber“ programmierte software verträgt meist mehr gleichzeitige benutzer.

was anderes: offene sessions blockieren nicht nur systemressourcen sondern halten ev. auch irgendwelche locks in der db. sofern du brav deine transaktionen beendest, kann da praktisch nichts passieren. nur tendieren leute, die ressourcen nicht sofort freigeben, auch dazu, transaktionen länger als notwendig offen zu halten, was ziemlich drastische auswirkungen haben kann.

lg
erwin

Sollte man das?

Es ist zwar Richtig, dass eine Connection Resourcen kostet. Eine Connection aufzumachen aber auch, daher macht ‚man‘ das normalerweise über einen Connection Pool. D.h. Connections werden nicht geschlossen, sondern der ‚Allgemeinheit‘ wieder zur Nutzung zur Verfügung gestellt.

Wie beim Ski fahren. Da baut man sich ja auch nicht seinen Lift, fährt den Berg hoch und baut den Lift wieder ab. Sondern ‚leiht‘ sich einen Sitz und gibt ihn wieder ab, wenn man oben ist.

Ok, Scheiss Beispiel.

Jens