Habe ich den Schuldigen?

Unifex

New Member
Alle paar Wochen habe ich ein Problem mit einer Datenbank.
Man kann dann einfach nicht mehr zugreifen auf die Webseite, die diese Datenbank verwendet.

Die CPU Auslastung geht auf 100%.

Heute Abend war es also wieder soweit. Ich starte dann die Datenbank neu und es geht wieder für ein paar Wochen.

Jetzt habe ich mal geschaut was im MYSQL Log steht und da war dann ein Eintrag Slow Query zu finden. Es war der einzige Eintrag und er passt von der Zeit her.

Der Eintrag lautet:

Code:
# Time: 121125 19:24:22
# User@Host: *****[******] @ localhost []
# Query_time: 709.165546  Lock_time: 0.000133 Rows_sent: 197  Rows_examined: 2063347120
use datenbank;
SET timestamp=1353867862;
select m1.*, f.username fromu, t.username tou from cometchat m1, user f, user t  
	where  f.userid = m1.from and t.userid = m1.to and ((m1.from = '6592' and m1.to = '5494') or (m1.to = '6592' and m1.from = '5494')) and (m1.sent) > ALL
	(select (m2.sent)+1800 from cometchat m2
	where ((m2.to = m1.to and m2.from = m1.from) or (m2.to = m1.from and m2.from = m1.to))
	and m2.sent <= m1.sent and m2.id < m1.id) order by id desc;
/usr/sbin/mysqld, Version: 5.5.24-0ubuntu0.12.04.1-log ((Ubuntu)). started with:
Tcp port: 3306  Unix socket: /var/run/mysqld/mysqld.sock
Time                 Id Command    Argument

Es geht also offensichtlich um die Tabelle Cometchat, wenn ich das richtig lese. Eine Tabelle mit relativ vielen Datensätzen (über 200.000).

In phpmyadmin sieht der Eintrag so aus: ~219,651 InnoDB

Es ist der einzige Eintrag mit einer "Welle" vor der Zahl. Keine Ahnung was das zu bedeuten hat.

Könnte das vielleicht der Grund sein, für mein "Absturzproblem"?
 
In phpmyadmin sieht der Eintrag so aus: ~219,651 InnoDB
Es ist der einzige Eintrag mit einer "Welle" vor der Zahl. Keine Ahnung was das zu bedeuten hat.

Die Tilde bedeutet, dass der Wert geschätzt ist.

Könnte das vielleicht der Grund sein, für mein "Absturzproblem"?
In diesem Falle auf die Logs zu vertrauen ist der falsche Ansatz. Denn du startest vermutlich den MySQL Server neu, bevor das Query abgeschlossen ist. Somit wird es auch nicht gelogt. Zumindest nicht als Slow Query.
Du solltest, wenn das Problem auftritt, ein "show processlist" via MySQL Client absetzen und dir die aktuell laufenden Queries anschauen.
Gegebenenfalls einzelne Queries killen und nicht den gesamten MySQL Server.
 
Das bedeutet, dieser Query, den ich da stehen habe, war schon abgeschlossen?

11 Minuten finde ich etwas heftig :)

Da der nur dort auftaucht (habe mir auch die alten Logs angeschaut), lag für mich die Vermutung nach, dass es was mit diesem Query zu tun haben musste.
 
>2kkk Rows angefasst, das lässt sich garantiert durch Aufsplitten des Query deutlich senken.
Code:
Rows_examined: 2063347120

Code:
... and (m1.sent) > ALL ...
Ist das "ist grösser als ALL" dort Absicht?
 
Last edited by a moderator:
Ich habe mir die Tabelle jetzt mal angeschaut und da stehen nur Chat Nachrichten drin.
Mit etwas suchen bin ich auf einen Cron Job gestoßen, der alle alten Einträge killt. Schwups waren es nur noch 28 Datensätze.

Da dürfte der Query dann aber keine Probleme mehr haben :)

In drei Wochen, weiß ich dann, ob das das Problem war.
 
Back
Top