Abfrage finden, die: Handler_read_rnd_next erzeugt.

Abfrage finden, die: Handler_read_rnd_next erzeugt.

am 16.02.2007 20:39:23 von GreenRover

Hallo, ich habe eine Recht hohe zahl bei: Handler_read_rnd_next (324k in
5minuten Serverlauzeit).
Wie kann ich die Query`s herausfinden die diesen Effekt haben?
Bzw werhöht sich dieser Wert auch, wenn ich ein Query habe, der den
Inhalt der gesamten Tabelle ausliest? (ohne WHERE und LIMIT)

MFG Heiko

Re: Abfrage finden, die: Handler_read_rnd_next erzeugt.

am 16.02.2007 21:21:41 von Daniel Fischer

Heiko (GreenRover) Henning!

> Hallo, ich habe eine Recht hohe zahl bei: Handler_read_rnd_next (324k in
> 5minuten Serverlauzeit).
> Wie kann ich die Query`s herausfinden die diesen Effekt haben?
> Bzw werhöht sich dieser Wert auch, wenn ich ein Query habe, der den
> Inhalt der gesamten Tabelle ausliest? (ohne WHERE und LIMIT)

Das kommt der Sache schon recht nahe. Es wird gezählt, wie oft die
nächste Zeile nach einer vorher gelesenen angefordert wird. Das heißt,
am höchsten wird der Wert, wenn für einzelne Anfragen die komplette
Tabelle gescannt werden muss - also auch wenn es eine WHERE-Klausel gibt,
für die trotzdem alle Zeilen abgesucht werden müssen. Schuld ist also
eventuell das Fehlen eines passenden Indexes.

Du kannst das Slow Query Log benutzen, um Queries zu finden, die keinen
Index verwenden. Dazu müssen bei Serverstart die Optionen
--log-queries-not-using-indexes --log-slow-queries angegeben werden.

Du kannst dir auch mit EXPLAIN SELECT ... einzelne Queries erklären
lassen.


Gruß
Daniel