mysql-Prozesse hängen

mysql-Prozesse hängen

am 18.04.2006 15:01:51 von martin.lueer

Hallo zusammen,

Ich bin gerade dabei einen Server einzurichten. Jetzt stehe ich vor dem
Problem, dass sich einige mysql-Prozesse aufhängen. Aufgefallen sind mir
bisher nur Alter, Insert und Update Abfragen, select scheint nicht
betroffen zu sein.

Versionen: (Debian/stable/amd64)
mysql-server-5 5.0.19-1.dotdeb
mysql-client-5 5.0.19-1.dotdeb
libmysqlclient 5.0.19-1.dotdeb
libmysqlclient 4.1.15-0.dotdeb
apache2-common 2.0.54-5
php5-cli 5.1.2-1.dotdeb
php5-common 5.1.2-1.dotdeb
php5-mysql 5.1.2-1.dotdeb
php5-mysqli 5.1.2-1.dotdeb
Linux 2.6.16-cks3

Ich habe es auch schon mit mysql4/php4 und dem Original-Debian Kernel
probiert, leider ohne Erfolg.

Hier eine Beispielausgabe aus phpmyadmin:

Beenden 17 cacti localhost cacti Sleep 820 --- ---
Beenden 18 cacti localhost cacti Sleep 88 --- ---
Beenden 19 cacti localhost cacti Sleep 88 --- ---
Beenden 20 cacti localhost cacti Sleep 90 --- ---
Beenden 21 cacti localhost cacti Sleep 821 --- ---
Beenden 22 lanstrike localhost TYPO3lanstrike Query 813 update
INSERT INTO cache_pages(
hash,
page_id,
HTML,
temp_content,
cache_data
Beenden 30 cacti localhost cacti Sleep 390 --- ---
Beenden 31 cacti localhost cacti Sleep 88 --- ---
Beenden 44 root localhost mysql Query 0 --- SHOW PROCESSLIST


Es beschränkt sich auch nicht auf eine bestimmte Datenbank oder einen
bestimmten Benutzer, sondern tritt überall auf und auch nicht immer.
Hat irgendjemand eine Idee?

Gruß,
Martin

Re: mysql-Prozesse hängen

am 18.04.2006 15:08:06 von Christian Kirsch

Martin Lüer schrieb:
> Hallo zusammen,
>
> Ich bin gerade dabei einen Server einzurichten. Jetzt stehe ich vor dem
> Problem, dass sich einige mysql-Prozesse aufhängen. Aufgefallen sind mir
> bisher nur Alter, Insert und Update Abfragen, select scheint nicht
> betroffen zu sein.
>
> Versionen: (Debian/stable/amd64)
> mysql-server-5 5.0.19-1.dotdeb
> mysql-client-5 5.0.19-1.dotdeb
> libmysqlclient 5.0.19-1.dotdeb
> libmysqlclient 4.1.15-0.dotdeb
> apache2-common 2.0.54-5
> php5-cli 5.1.2-1.dotdeb
> php5-common 5.1.2-1.dotdeb
> php5-mysql 5.1.2-1.dotdeb
> php5-mysqli 5.1.2-1.dotdeb
> Linux 2.6.16-cks3
>
> Ich habe es auch schon mit mysql4/php4 und dem Original-Debian Kernel
> probiert, leider ohne Erfolg.
>
> Hier eine Beispielausgabe aus phpmyadmin:
>
> Beenden 17 cacti localhost cacti Sleep 820 --- ---
> Beenden 18 cacti localhost cacti Sleep 88 --- ---
> Beenden 19 cacti localhost cacti Sleep 88 --- ---
> Beenden 20 cacti localhost cacti Sleep 90 --- ---
> Beenden 21 cacti localhost cacti Sleep 821 --- ---
> Beenden 22 lanstrike localhost TYPO3lanstrike Query 813 update
> INSERT INTO cache_pages(
> hash,
> page_id,
> HTML,
> temp_content,
> cache_data
> Beenden 30 cacti localhost cacti Sleep 390 --- ---
> Beenden 31 cacti localhost cacti Sleep 88 --- ---
> Beenden 44 root localhost mysql Query 0 --- SHOW PROCESSLIST
>

PHPMyAdmin ist hier Offtopic. Was verraten Dir denn
ps
SHOW STATUS (in mysql)
und der
MySQL-Log
?

Re: mysql-Prozesse hängen

am 18.04.2006 16:06:18 von martin.lueer

Christian Kirsch wrote:
> Martin Lüer schrieb:
>> Hallo zusammen,
>>
>> Ich bin gerade dabei einen Server einzurichten. Jetzt stehe ich vor dem
>> Problem, dass sich einige mysql-Prozesse aufhängen. Aufgefallen sind mir
>> bisher nur Alter, Insert und Update Abfragen, select scheint nicht
>> betroffen zu sein.
>>
>> Versionen: (Debian/stable/amd64)
>> mysql-server-5 5.0.19-1.dotdeb
>> mysql-client-5 5.0.19-1.dotdeb
>> libmysqlclient 5.0.19-1.dotdeb
>> libmysqlclient 4.1.15-0.dotdeb
>> apache2-common 2.0.54-5
>> php5-cli 5.1.2-1.dotdeb
>> php5-common 5.1.2-1.dotdeb
>> php5-mysql 5.1.2-1.dotdeb
>> php5-mysqli 5.1.2-1.dotdeb
>> Linux 2.6.16-cks3
>>
>> Ich habe es auch schon mit mysql4/php4 und dem Original-Debian Kernel
>> probiert, leider ohne Erfolg.
>>
>> Hier eine Beispielausgabe aus phpmyadmin:
>>
>> Beenden 17 cacti localhost cacti Sleep 820 --- ---
>> Beenden 18 cacti localhost cacti Sleep 88 --- ---
>> Beenden 19 cacti localhost cacti Sleep 88 --- ---
>> Beenden 20 cacti localhost cacti Sleep 90 --- ---
>> Beenden 21 cacti localhost cacti Sleep 821 --- ---
>> Beenden 22 lanstrike localhost TYPO3lanstrike Query 813 update
>> INSERT INTO cache_pages(
>> hash,
>> page_id,
>> HTML,
>> temp_content,
>> cache_data
>> Beenden 30 cacti localhost cacti Sleep 390 --- ---
>> Beenden 31 cacti localhost cacti Sleep 88 --- ---
>> Beenden 44 root localhost mysql Query 0 --- SHOW PROCESSLIST
>>
>
> PHPMyAdmin ist hier Offtopic. Was verraten Dir denn
> ps
> SHOW STATUS (in mysql)
> und der
> MySQL-Log
> ?
>

Hallo,

scheinbar handelt es sich hierbei um einen Bug[1] in der libc6, der für
Debian Sarge amd64 noch nicht gefixt ist.
Ich werde mir nun eine eigene, gepatchte Version bauen.

[1] http://sources.redhat.com/ml/libc-hacker/2004-02/msg00019.ht ml


Vielen Dank,
Martin

Re: mysql-Prozesse hängen

am 18.04.2006 16:40:42 von Axel Schwenke

=?ISO-8859-1?Q?Martin_Lüer?= wrote:
>
> Ich bin gerade dabei einen Server einzurichten. Jetzt stehe ich vor dem
> Problem, dass sich einige mysql-Prozesse aufhängen.

Was meinst du mit Aufhängen? Und BTW das sind Threads, keine Prozesse.

> Versionen: (Debian/stable/amd64)
> mysql-server-5 5.0.19-1.dotdeb
> mysql-client-5 5.0.19-1.dotdeb
> libmysqlclient 5.0.19-1.dotdeb
> libmysqlclient 4.1.15-0.dotdeb

IMHO ist das letzte Paket sinnlos. Zudem ist der 4.1er Client nicht
ganz kompatibel zum 5.0 Server (Protokoll-Änderung für den neuen
DECIMAL Typ in 5.0). Schmeiß das raus.

BTW, was ist dotdeb eigentlich für eine APT-Quelle? Ist das wirklich
sauber genug, um davon eine Produktionsumgebung aufzusetzen?

Außerdem kommt dein Kernel anscheinend aus einer anderen Quelle als
die Applikationen. MySQL hat ein paar häßliche Abhängigkeiten von der
Threading-Library (und die wiederum vom Kernel).

> Hier eine Beispielausgabe aus phpmyadmin:
>
> Beenden 17 cacti localhost cacti Sleep 820 --- ---
> Beenden 18 cacti localhost cacti Sleep 88 --- ---
> Beenden 19 cacti localhost cacti Sleep 88 --- ---
> Beenden 20 cacti localhost cacti Sleep 90 --- ---
> Beenden 21 cacti localhost cacti Sleep 821 --- ---
> Beenden 22 lanstrike localhost TYPO3lanstrike Query 813 update
> INSERT INTO cache_pages(
> hash,
> page_id,
> HTML,
> temp_content,
> cache_data
> Beenden 30 cacti localhost cacti Sleep 390 --- ---
> Beenden 31 cacti localhost cacti Sleep 88 --- ---
> Beenden 44 root localhost mysql Query 0 --- SHOW PROCESSLIST

Ich nehme an, das ist was phpMyAdmin aus SHOW FULL PROCESSLIST macht.
Anscheinend ist MySQL-Thread #22 seit 813 Sekunden damit beschäftigt,
ein INSERT in eine Cache-Tabelle von Typo3 zu machen.

Falls das "update" oben der `State` Spalte von SHOW PROCESSLIST
entsprechen sollte, kann man nur sagen, daß der Thread irgendwo in
INSERT steckt (INSERT kennt nur die States "init", "update" und "end")

Interessant wäre, ob das INSERT irgendwann mal fertig wird oder für
immer hängt. 813 Sekunden sind aber eine recht lange Zeit.


Ursachen dafür kann es viele geben

- Tabelle (Index) kaputt
- eine Resource ist ausgelastet (CPU, RAM, Disk)
- da es ein INSERT ist: die Platte ist voll (Quota?)
- ein Bug in MySQL

> Es beschränkt sich auch nicht auf eine bestimmte Datenbank oder einen
> bestimmten Benutzer, sondern tritt überall auf und auch nicht immer.
> Hat irgendjemand eine Idee?

Intermittierend auftretende Langläufer-Queries auf variierenden
Tabellen deuten auf ein Resourcen- wenn nicht gar Hardware-Problem.
Steht was im MySQL-Errorlog? Im Syslog?


XL

Re: mysql-Prozesse hängen

am 18.04.2006 20:30:19 von martin.lueer

Axel Schwenke wrote:
> =?ISO-8859-1?Q?Martin_Lüer?= wrote:
>> Ich bin gerade dabei einen Server einzurichten. Jetzt stehe ich vor dem
>> Problem, dass sich einige mysql-Prozesse aufhängen.
>
> Was meinst du mit Aufhängen? Und BTW das sind Threads, keine Prozesse.
>

Entschuldige, ich habe es fälschlicherweise von "SHOW PROCESSLIST"
abgeleitet.

>> Versionen: (Debian/stable/amd64)
>> mysql-server-5 5.0.19-1.dotdeb
>> mysql-client-5 5.0.19-1.dotdeb
>> libmysqlclient 5.0.19-1.dotdeb
>> libmysqlclient 4.1.15-0.dotdeb
>
> IMHO ist das letzte Paket sinnlos. Zudem ist der 4.1er Client nicht
> ganz kompatibel zum 5.0 Server (Protokoll-Änderung für den neuen
> DECIMAL Typ in 5.0). Schmeiß das raus.

Habe ich mir auch gedacht, allerdings würden damit einige Abhängigkeiten
zerstört:

srv1:~# apt-get remove libmysqlclient14
Reading Package Lists... Done
Building Dependency Tree... Done
The following packages will be REMOVED:
libdbd-mysql-perl libmysqlclient14 mysql-client-5.0 mysql-server
mysql-server-5.0 php5-mysql php5-mysqli
0 upgraded, 0 newly installed, 7 to remove and 1 not upgraded.
Need to get 0B of archives.
After unpacking 68.3MB disk space will be freed.

>
> BTW, was ist dotdeb eigentlich für eine APT-Quelle? Ist das wirklich
> sauber genug, um davon eine Produktionsumgebung aufzusetzen?
>

http://www.dotdeb.org
Mag man sich drüber streiten, für meine Zwecke stufe ich es als
vertrauenswürdig ein.

> Außerdem kommt dein Kernel anscheinend aus einer anderen Quelle als
> die Applikationen. MySQL hat ein paar häßliche Abhängigkeiten von der
> Threading-Library (und die wiederum vom Kernel).
>

Ich habe es auch schon mit den (älteren) Paketen aus dem offiziellen
Stable-Zweig von Debian probiert, leider hakte es auch hierbei. s.u.

>> Hier eine Beispielausgabe aus phpmyadmin:
>>
>> Beenden 17 cacti localhost cacti Sleep 820 --- ---
>> Beenden 18 cacti localhost cacti Sleep 88 --- ---
>> Beenden 19 cacti localhost cacti Sleep 88 --- ---
>> Beenden 20 cacti localhost cacti Sleep 90 --- ---
>> Beenden 21 cacti localhost cacti Sleep 821 --- ---
>> Beenden 22 lanstrike localhost TYPO3lanstrike Query 813 update
>> INSERT INTO cache_pages(
>> hash,
>> page_id,
>> HTML,
>> temp_content,
>> cache_data
>> Beenden 30 cacti localhost cacti Sleep 390 --- ---
>> Beenden 31 cacti localhost cacti Sleep 88 --- ---
>> Beenden 44 root localhost mysql Query 0 --- SHOW PROCESSLIST
>
> Ich nehme an, das ist was phpMyAdmin aus SHOW FULL PROCESSLIST macht.
> Anscheinend ist MySQL-Thread #22 seit 813 Sekunden damit beschäftigt,
> ein INSERT in eine Cache-Tabelle von Typo3 zu machen.
>
> Falls das "update" oben der `State` Spalte von SHOW PROCESSLIST
> entsprechen sollte, kann man nur sagen, daß der Thread irgendwo in
> INSERT steckt (INSERT kennt nur die States "init", "update" und "end")
>
> Interessant wäre, ob das INSERT irgendwann mal fertig wird oder für
> immer hängt. 813 Sekunden sind aber eine recht lange Zeit.
>

Nein, steckte leider fest und liess sich auch nicht beenden, nur ein
killall -9 mysqld
hatte Erfolg.
>
> Ursachen dafür kann es viele geben
>
> - Tabelle (Index) kaputt
> - eine Resource ist ausgelastet (CPU, RAM, Disk)
> - da es ein INSERT ist: die Platte ist voll (Quota?)
> - ein Bug in MySQL
>
>> Es beschränkt sich auch nicht auf eine bestimmte Datenbank oder einen
>> bestimmten Benutzer, sondern tritt überall auf und auch nicht immer.
>> Hat irgendjemand eine Idee?
>
> Intermittierend auftretende Langläufer-Queries auf variierenden
> Tabellen deuten auf ein Resourcen- wenn nicht gar Hardware-Problem.
> Steht was im MySQL-Errorlog? Im Syslog?

Syslog und mysql-Log waren diesbezüglich leer, aber zum Glück bin ich
auf einen Bug-Report [1] gestoßen, zwar für RedHat (erst später auch im
Debian-BugTrackingSys [2]) aber der Patch scheint das Problem bisher zu
beheben.

[1] http://sources.redhat.com/ml/libc-hacker/2004-02/msg00019.ht ml
[2] http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=314408

Vielen Dank an alle die mitgelesen haben.


Gruß,
Martin