Thread $sth->finish(); zwingend erforderlich (20 answers)
Opened by Torsten at 2009-10-13 18:25

sid burn
 2009-10-13 18:45
#126931 #126931
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Du brauchst "->finish()" nur dann zu machen wenn du nicht alle Records einer Abfrage ausgelsen hast.

Wenn du deine Daten z.b. so ausliest.
Code: (dl )
1
2
while ( my $row = $sth->fetchrow_arrayref ) {
}

dann brauchst du kein nachfolgendes "->finish()" mehr.

finish() musst du nur dann hinzufügen, wenn du mit "fetchrow..." nicht solange liest bis es "undef" als rückgabe zurück gegeben hat. Daher wenn du z.B. soetwas machst.

Code: (dl )
1
2
$sth->prepare("SELECT COUNT(*) FROM asd");
my $row = $sth->fetchrow_arrayref;


Dann brauchst du dringend ein "->finish()" Weil hier zwar ein Eintrag ausgelesen wird (auch wenn nur einer corhanden sein wird), aber eigentlich sind zwei vorhanden. Sprich der Cursor in der Datenbank gibt dir eine zeile zurück und dann die Information "nicht mehr vorhanden". Solange du die Information "nicht mehr vorhanden" abrufst bleibt also ein Cursor auf der DB offen.


Ansonsten Cached MySQL auch die Abfragen wodurch es einiges an RAM braucht. Das ist auch gut so weil MySQL dadurch schneller wird. Ansonsten hast du denn RAM Probleme? Wenn du ein "free" ausgiebst wird swap genutzt? Wenn nein spielt es auch keine Rolle wieviel MySQL an RAM nutzt.

RAM ist dafür da das er genutzt wird. Von RAM der in deinem System ist aber ungenutzt oder Leer ist hast du nichts von. Dann kannst du den RAM auch wieder ausbauen.

Diese falsche Windows Mentalität "ich brauche freien ram" ist daher etwas falsch.

Wenn der RAM wirklich ein Problem darstellt. Was heißt das Linux anfängt zu swapen musste du entweder mehr RAM einbauen, oder aber MySQL begrenzen wieviel RAM er nutzen darf soetwas konnte man meine ich in der "my.cnf" Konfigurieren. Die genauen Parameter dazu weiß ich gerade nicht.
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de

View full thread $sth->finish(); zwingend erforderlich