Antwort #10 am: 28. Januar 2015, 11:09:09
Guten Tag Genossen,
hast du schon überprüft, ob es bestimmte Querys gibt, die besonders langsam laufen und damit andere blockieren? Meist gibt es ein bis zwei Flaschenhälse, die sich so ganz gut finden lassen.
Ja, leider ohne Erfolg. Wir können nichts explizites als Ursache erkennen. Einziger Anhaltspunkt den wir aktuell haben, ist dass sobald von den Jungs im Rechenzentrum der MySQL-Dienst neu gestartet wurde beziehungsweise manuell die offenen Anfragen gekillt werden alles vergleichsweise flott läuft. Woraufhin die Vermutung das der nicht vorhandene db_close schuld ist entstand.
[...]
Ich schaffe es aberauf fast 10 Sekunden, wenn ich die Artikelanzahl hinter den Kategorien anzeigen lasse.
Guter Hinweis, die wurden angezeigt. Hat leider nicht den gewünschten WOW-Effekt gebracht.
Bei 14 Sekunden wird da doch noch was anderes geladen. Externe Daten?
Nein, nichts externes für die Shop-Seiten. Ein weiterer Dienst füttert im Hintergrund die Datenbank regelmäßig mit neuen Daten, den haben wir auch schon optimiert.
Zu den 14 Sekunden muss ich auch sagen, dass dies nur die Startseite betraf, wo alle Neuheiten (bis zu 1.000 Artikel) angezeigt wurden. Einzelne Kategorie- und Detailseiten mit weniger Artikeln waren schneller, doch teilweise auch bis zu 4 Sekunden, was deutlich zu lange ist.
Wobei diese aktuell im Schnitt bei 2 Sekunden liegen, nachdem gestern Abend im Rechenzentrum der MySQL-Dienst neu gestartet wurde. Was wiederum unseren Verdacht bestätigt.
Was den Ausgang angeht "db_close" sagt meine Erfahrung aus .NET: traue dem Garbage-Collector nicht. Der kommt irgendwann, aber nicht zwingend sofort nach dem Senden der Antwort. Daher ist explizit zu machen bestimmt ein erster Schritt.
Also doch noch so wie damals in meinen JAVA Zeiten: "Vertraue niemals dem Garbage Collector sondern recycle alles selbst", wurde mir damals gelehrt. Hatte es schon vermutet und wurde durch weitere Recherchen bestätigt.
Woraufhin ich jetzt nicht nur die bekannteste Resource $db_link am Ende schließe, sondern mir alle anschauen und die vom Typ "mysql link" und "mysql result" am Scriptende frei gebe. Folgendes habe ich in der
/includes/application_bottom.php danz am Ende dazu gebastelt und sehe bisher das alles rund läuft. Bin natürlich wie immer dankbar wenn ein zweites, drittes oder noch mehr Paar Augen darauf geworfen wird um eventuelle Schwachstellen zu erkennen:
Sobald ich neue Erkenntnisse habe ob dies eine sinnvolle Lösung war/ist werde ich mich spätestens wieder melden.
Frohes Schaffen,
Timo