Sven Rautenberg: & (MySQL) Serverbelastung durch DB-Abfrage

Beitrag lesen

Moin!

kann eine solche Datenbankabfrage (ohne "LIMIT") zu einer Überlastung des Servers führen, wenn die Datenbank sehr viele Einträge hat?

$result = mysql_query("SELECT id FROM ".$table);
$count = mysql_num_rows($result);

Was getan werden muß, muß getan werden. Um gewisse Dinge kommst du einfach nicht herum. Und in der Regel funktionieren sie ja auch prima. Wenn du tatsächlich auf eine Überlastung gestoßen bist, ist es interessant, die Art der Überlastung genauer zu untersuchen, um dann gezielt Abhilfe zu schaffen. So ins Blaue hinein einen Rat zu geben dürfte schwierig sein.

An deiner Abfrage kann ich grundsätzlich erst einmal nichts verwerfliches finden. MySQL kommt selbst prima mit mehreren Milliarden Datensätzen zurecht - und wenn der Server ausreichend dimensioniert ist, sogar in einer sehr guten Abfragezeit. Bedenke, dass irgendwo das Ergebnis deiner Abfrage von der Datenbank zwischengespeichert werden muß - gerne wird das im RAM getan, und wenn RAM alle ist, kommt Auslagerungsspeicher auf der Festplatte zum Einsatz - natürlich erstmal nicht bei deinen Abfragedaten, sondern bei Programmen, die gerade nicht benutzt werden - was durchaus zu Konflikten führen kann, wenn die eben doch benutzt werden. Irgendwann geht die Performance in den Keller, und der Server reagiert nicht mehr.

Außerdem speichert PHP die Abfragedaten zwischen. Du kannst im Abfrageergebnis schließlich frei herumspringen und nicht nur der Reihe nach die Datensätze auslesen, sondern wahlfrei. Zu diesem Zeitpunkt hat MySQL den Speicherplatz hoffentlich wieder freigegeben, aber rechne lieber damit, dass beide Systeme zumindest zeitweise jeweils den kompletten Speicherplatz benötigen. Wenn du also eine Abfrage machst, die 500 Megabyte an Daten bewegt, dann hast du besser 1 Gigabyte an RAM alleine für diese Aufgabe übrig - plus dem, was der Server sonst noch so braucht.

Zum Glück tritt solch ein Fall nicht ganz so häufig auf. In der Regel kann man eine riesige Abfrage immer irgendwie einschränken auf Teilmengen, die nacheinander bearbeitet werden.

- Sven Rautenberg

--
"Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)