MySQL Dauer einer Abfrage vorher abschätzen

Hallo in die Runde,

eine neue Idee, eine neue Frage:

Kennt jemand eine Möglichkeit, die Dauer einer MySQL Abfrage vorher abschätzen lassen zu können ? Ich habe EXPLAIN gefunden, um vom MySQL Server Informationen zu einer Abfrage ermitteln zu können. Aber die Dauer ist nicht dabei. Gibt es dafür etwas - habe bisher nichts dazu gefunden.

Danke, Lo.

Hi,
was meinst Du mit vorher abschätzen?

Falls Du die Dauer der Abfrage messen willst, geht das mit PHP ungefähr so:

$start = microtime();

… Datenbankabfrage …

$ende = microtime();
$dauer = $ende - $start;
?>

Grüße,
Dietmar

Hallo,

mit vorher meinte ich, bevor die Abfrage tatsächlich ausgeführt wird. Also etwa so:

„SELECT Dauer of (UPDATE ganz viele Datensätze)“

erstmal eine Schätzung, damit man per Script dem Benutzer anzeigen kann, wie lange die laufende Abfrage ungefär dauert, dann erst wird die Abfrage tatsächlich selbst aufgerufen.

„UPDATE ganz viele Datensätze“

Ich habe hier wegen einer großen Datenbank Abfragen, die 20 Minuten oder länger dauern und dann auch oft noch mehrere hintereinander, da möchte ich dem Nutzer vorher anzeigen, wie lange er darauf warten muss. Langfristig soll ein Fortschrittsbalken angezeigt werden.

Das mit microtime() mache ich im Moment, aber da weiß ich eben nur hinterher, wie lange ich habe warten müssen.

Viele Grüße, lo.

„SELECT Dauer of (UPDATE ganz viele Datensätze)“

… ich glaube sowas gibts nicht.
Aber wollte man eine Funktion schreiben, die einen Näherungswert liefert, bräuchte man doch nur die mittlere Dauer der Abfrage bezogen auf einen Datensatz mit der Anzahl aller Datensätz zu multiplizieren.

Also bestimm doch einfach mal die ungefähre Dauer Deiner vorkommenden Abfragen, und gib dann zu jedem Link, der zu einer Abfrage führt, die geschätze (passend multiplizierte) Dauer aus.

erstmal eine Schätzung, damit man per Script dem Benutzer
anzeigen kann, wie lange die laufende Abfrage ungefär dauert,
dann erst wird die Abfrage tatsächlich selbst aufgerufen.

„UPDATE ganz viele Datensätze“

Ich habe hier wegen einer großen Datenbank Abfragen, die 20
Minuten oder länger dauern und dann auch oft noch mehrere
hintereinander, da möchte ich dem Nutzer vorher anzeigen, wie
lange er darauf warten muss. Langfristig soll ein
Fortschrittsbalken angezeigt werden.

Das mit microtime() mache ich im Moment, aber da weiß ich eben
nur hinterher, wie lange ich habe warten müssen.

Viele Grüße, lo.

Hallo lojope,

man könnte die Statusvariable Handler_read_rnd_next auswerten. Mit dieser Variable lassen sich schlecht indizierte Tabellen oder suboptimale Abfragen aufspüren. Mit etwas Rechnerei lässt sich abschätzen, wie lange eine Abfrage benötigt.

Das Prinzip ist hier beschrieben:
http://www.mysqlperformanceblog.com/2008/04/22/how-t…

Peter