Hallo Community,...
lange Zeit versuche ich schon rauszufinden, warum auf einmal meine Datenbank zusammenbricht.
Im Slow-Query-Log erschienen Queries, die ich wirklich nicht mehr optimieren konnte, die auch normalerweise weniger als eine Millisekunden brauchen.
Jetzt habe ich Benches gesetzt (die Funktion ist in irgeneinem Buch von O'Reilly). Grob sieht das folgendermaßen aus.
$start = getmicrotime();
if (!isset($db))
{
...
$db = @mysql_connect($host,$user,$pwd);
$bench1 = getmicrotime();
...
@mysql_select_db($dba,$db);
$bench2 = getmicrotime();
}
$erg = mysql_query(...,$db);
$ende = getmicrotime();
Unabhängig von dem Slow-Query-Log habe ich nun diese Zeiten (nur von den Ausreissern) alle in ein File geschrieben und mit dem Slow-Query-Log abgegliechen.
Was ich dabei festgestellt habe ist, daß die Slow-Query garnicht 'Slow' ist, sondern das '@mysql_select_db' die Zeit frisst.
Die Query lief immer gleich schnell ab, wenn jedoch vorher die Datenbank ausgewählt werden musste, dann kam es schon mal vor, daß die Query sehr langsam wurde (da ist sogar manchmal ne Viertelstunde dabei).
Komisch nur, daß das Log das nun auf die nachfolgende 'unschuldige' Query schiebt.
Die Slow-Queries fangen sich dann schlagartig an zu akkumulieren. Innerhalb weniger Minuten sammeln sich 100te von Slow-Queries.
Die Anzahl der Threads (normal 8) steigt auf 50.
In meinem eigenen Log habe ich ein 'mysql_list_processes($db)' drinnen, was mir da halt auffällt ist, daß irgendwann mindestens ein 'Init DB' auftaucht - was für mich ein Zeichen ist, daß die Datenbank sowas wie ein Reboot durchführt.
Nun mein eigentliches Problem, ich versuche zu verstehen, warum das '@mysql_select_db' auf einmal langsamer wird.
Was da passiert, und vorallem, was für Ideen gibt es, da einzugreifen ?
Das einzige, was ich bisher getestet habe ist ein 'FLUSH HOSTS' abzusetzen, wenn die Anzahl der Threads deutlich ansteigt. Die Wirkung muß ich erst noch beobachten über einen längeren Zeitraum, weil ich ja immer warten muß, bis die Datenbank zusammenbricht (etwa 4mal am Tag).
Gruß FlashnFantasy