Lost connection to MySQL server during query

Lost connection to MySQL server during query

am 15.10.2006 12:55:49 von Oliver Dietz

Hallo zusammen,

ich hab mit einer PHP-Anwendung das Problem, dass ich ca. 1 bis 2x am Tag
einen Fehler bekomme:
#2013 Lost connection to MySQL server during query

Die restlichen rund 10 mio. Queries am Tag bringen keinen Fehler. Der Fehler
tritt bei unterschiedlichen Queries auf und unabhängig davon, ob es eine
TCP/IP oder Socket-Connection ist. Natürlich nicht bewußt reproduzierbar ...

Auffallen tut mir das nur, weil ich bei jedem fehlgeschlagegen SQL-Statement
eine EMail bekomme ...


Noch 2 Sachen die mir auffallen:

1. Wenn ich in phpMyAdmin auf den Status schaue, dann steht in der
Verbindungsstatistik, dass von 338k Connections 76k abgebrochen wurden und
37 fehlgeschlagen sind. 22% abgebrochen müsste ja recht schnell auffallen,
wenn man ein paar Seiten aufruft ... ich hab aber noch nie eine derartige
Fehlerseite gesehen. Kann es sein, dass die abgebrochenen Verbindungen
einfach nur Verbindungen sind, die von PHP nicht explizit geschlossen wurden
und dann durch einen Timeout nach einer gewissen Zeit abbrechen?

Die 37 fehlgeschlagenen Verbindungen könnten die "Lost connections" sein ...


2. etwa 20 Queries am Tag sind sehr langsam. Z.B.

SELECT `value` FROM `sysconfig` WHERE `name`='ocxml11client_lastupdate'

name ist ein unique-Key, die Tabelle hat keine Einträge. Ein Locking
Problem, durch andere Threads die Datensätze abändern kann in diesem Fall
100%ig ausgeschlossen werden.

Die Query dauerte aber trotzdem 7.6 Sekunden. Dieses Problem tritt mit
verschiedensten Tabellen und Queries auf, die normalerweise alle unter 0.1
Sekunden ausgeführt werden.

Zusätzlich tritt das Problem zu unterschiedlichen Uhrzeiten auf ... Backup
oder ähnliches kann ich also auch ausschließen. Der Server hat einen Average
Load ist in Stoßzeiten von 0,6 bis 1,6 ... also noch nix wildes. Das Problem
tritt aber auch mitten in der Nacht auf, wo der Server nur Däumchen dreht.



Ich würde mich um ein paar Tipps freuen, wie ich dem Problem auf die
Schliche kommen könnte. Weitere Infos zur Umgebung poste ich gerne ...
Ich hab auch schon per Google recherchiert, hab aber mit dem "Lost
Connection" nur Probleme gefunden die permanent auftreten und nicht nur
sporadisch.


Besten Dank und schöne Grüße,
Oliver

Re: Lost connection to MySQL server during query

am 15.10.2006 13:16:22 von Kris

Oliver Dietz wrote:
> Zusätzlich tritt das Problem zu unterschiedlichen Uhrzeiten auf ... Backup
> oder ähnliches kann ich also auch ausschließen. Der Server hat einen
> Average Load ist in Stoßzeiten von 0,6 bis 1,6 ... also noch nix wildes.
> Das Problem tritt aber auch mitten in der Nacht auf, wo der Server nur
> Däumchen dreht.

Die Load ist bei einem Datenbankserver eher sekundär. Was sagt "iostat -x
1" (die erste Zeile einer solchen iostat-Ausgabe ist nicht kalibriert - sie
ist der Durchschnitt seit dem letzten Aufruf und interessiert nur am Rande)
zu den Zeiten, wenn solche Queries langsam sind? Die Spalten r/s, w/s und
util% sind spannend.

Kris

Re: Lost connection to MySQL server during query

am 15.10.2006 18:48:27 von Oliver Dietz

Hallo Kristian,

>> Zusätzlich tritt das Problem zu unterschiedlichen Uhrzeiten auf ...
>> Backup
>> oder ähnliches kann ich also auch ausschließen. Der Server hat einen
>> Average Load ist in Stoßzeiten von 0,6 bis 1,6 ... also noch nix wildes.
>> Das Problem tritt aber auch mitten in der Nacht auf, wo der Server nur
>> Däumchen dreht.
>
> Die Load ist bei einem Datenbankserver eher sekundär. Was sagt "iostat -x
> 1" (die erste Zeile einer solchen iostat-Ausgabe ist nicht kalibriert -
> sie
> ist der Durchschnitt seit dem letzten Aufruf und interessiert nur am
> Rande)
> zu den Zeiten, wenn solche Queries langsam sind? Die Spalten r/s, w/s und
> util% sind spannend.

Ich hab iostat mal drauf gespielt. Auf dem Server läuft Fedora Core 5 mit
Xen. sda und sdb sind in mehreren Softraid 1 organisiert.

avg-cpu: %user %nice %system %iowait %idle
0.00 0.00 0.00 0.00 100.00

Device: r/s w/s avgqu-sz await svctm %util
sda 2.00 5.00 18446744073255824.00 7.43 143.43 100.40
sdb 1.00 5.00 18446744073255824.00 5.33 167.33 100.40
md1 0.00 0.00 0.00 0.00 0.00 0.00
md3 3.00 1.00 0.00 0.00 0.00 0.00
md2 0.00 0.00 0.00 0.00 0.00 0.00
md0 0.00 0.00 0.00 0.00 0.00 0.00
dm-0 0.00 0.00 0.00 0.00 0.00 0.00
dm-1 0.00 0.00 0.00 0.00 0.00 0.00
dm-2 0.00 1.00 0.00 0.00 0.00 0.00
dm-3 3.00 0.00 0.02 5.33 5.33 1.60

Komischerweise ist %util immer nahe 100 ... die avgqu-sz ist etwa 2 hoch 64
.... was mir auch "komisch" vorkommt.
r/s und w/s sind kurzzeitig immer mal auf 100 bis 250 ... bisher ist aber
noch keine langsame Query vorgekommen in der "Beobachtungszeit" ...

.... ich leg iostat mal in einen Cronjob


Danke & schöne Grüße,
Oliver

Re: Lost connection to MySQL server during query

am 09.11.2006 23:09:18 von Oliver Dietz

Hallo,

ich wollte noch kurz das Ergebnis zurückgeben ...
.... es gibt auch bei anderen (PHP-) Anwendungen auf dem Server sehr langsame
Abfragen, so dass ich nun einfach davon ausgehe, dass mehr RAM oder
schnellere Festplatten in den Server gehören. Ist bei 1&1 aber nicht ohne
ganz neuen Server machbar :-((

Die sporadisch auftretenden Lost Connections sind vermutlich Timeouts wegen
Table-Lockings o.ä. ...


Als letzte Hoffnung bleibt mir noch mit EXPLAIN die Nadel im Heuhaufen zu
suchen und evtl. ein paar schlecht indizierte Abfragen zu optimieren ...


Danke & schöne Grüße an Kris,
Oliver

Re: Lost connection to MySQL server during query

am 10.11.2006 10:29:59 von Helmut Chang

Oliver Dietz schrieb:

> ... es gibt auch bei anderen (PHP-) Anwendungen auf dem Server sehr langsame
> Abfragen, so dass ich nun einfach davon ausgehe, dass mehr RAM oder
> schnellere Festplatten in den Server gehören. Ist bei 1&1 aber nicht ohne
> ganz neuen Server machbar :-((
>
> Die sporadisch auftretenden Lost Connections sind vermutlich Timeouts wegen
> Table-Lockings o.ä. ...
>
>
> Als letzte Hoffnung bleibt mir noch mit EXPLAIN die Nadel im Heuhaufen zu
> suchen und evtl. ein paar schlecht indizierte Abfragen zu optimieren ...

*grins* Genau so arbeitet man, um Performance zu optimieren!

1.: Hardware aufrüsten
2.: Nochmals Hardware aufrüsten
3.: Weiter Hardware aufrüsten
4.: ..
5.: ..
..
..
..
99.: Schaun, was an der Applikation nicht stimmt.

gruss, heli

Re: Lost connection to MySQL server during query

am 11.11.2006 13:15:27 von Oliver Dietz

Hallo Helmut,

>> ... es gibt auch bei anderen (PHP-) Anwendungen auf dem Server sehr
>> langsame Abfragen, so dass ich nun einfach davon ausgehe, dass mehr RAM
>> oder schnellere Festplatten in den Server gehören. Ist bei 1&1 aber nicht
>> ohne ganz neuen Server machbar :-((
>>
>> Die sporadisch auftretenden Lost Connections sind vermutlich Timeouts
>> wegen Table-Lockings o.ä. ...
>>
>>
>> Als letzte Hoffnung bleibt mir noch mit EXPLAIN die Nadel im Heuhaufen zu
>> suchen und evtl. ein paar schlecht indizierte Abfragen zu optimieren ...
>
> *grins* Genau so arbeitet man, um Performance zu optimieren!
>
> 1.: Hardware aufrüsten
> 2.: Nochmals Hardware aufrüsten
> 3.: Weiter Hardware aufrüsten
> 4.: ..
> 5.: ..
> .
> .
> .
> 99.: Schaun, was an der Applikation nicht stimmt.

Danke für deinen produktiven Rat.

Selbstverständlich sind IMHO alle wesentlichen Abfragen schon mit EXPLAIN
bei der Entwicklung überprüft worden.
Das ist aber in einem Open Source Projekt mit >60.000 Zeilen in PHP-Dateien
nicht ganz einfach und so ruck-zuck machbar wenn man nicht den ganzen Tag
Zeit hat. Deshalb hab ich mich auch an diese NG gewendet ... vielleicht ist
bei der Applikation "Mysql" ja was falsch konfiguriert, das einem Experten
bei den Symptomen gleich auffällt ... wäre doch durchaus möglich?

Ausserdem lief die Anwendung unter ähnlichen Zugriffsraten schon auf einem
ähnlich dimensioniertem Server (ohne Xen und ohne 2. größere Website) und
hatte keine derartigen Probleme. Deshalb gehe ich nun einfach davon aus,
dass für den bereits mit Bedacht auf Performance programmierten Quellcode,
aber leider damals noch mit wenig Erfahrung für PHP und Mysql, die Hardware
unter den gegebenen Bedingnugen zu klein dimensioniert ist.

Dass schlechter Quellcode optimiert werden muss ist mir auch klar, wird auch
nebenher gemacht weil das ganze Projekt auf eine neue Codebasis gesetzt wird
.... und vielleicht wäre ja bei meiner Anfrage was rausgekommen, das man bei
dem neuen Quellcode gleich berücksichtigen kann.

Nicht immer wenn jemand sagt "die Hardware ist zu klein" ist die Erde eine
Scheibe ;-)

Falls du dir die Abfragestrategie mal ankucken möchtest kann ich dir gerne
ein paar Beispiele / den Quellcode / Datenbankschema zukommen lassen.


Schönes Wochenende,
Oliver

P.S. größere Hardware wird es erstmal nicht geben, deshalb "letzte Hoffnung"
.... wenn wir das nötige Geld hätten, wären wir nicht bei 1&1 ;-)

Re: Lost connection to MySQL server during query

am 12.11.2006 01:51:21 von Axel Schwenke

"Oliver Dietz" wrote:

> Selbstverständlich sind IMHO alle wesentlichen Abfragen schon mit EXPLAIN
> bei der Entwicklung überprüft worden.

Das ist leider überhaupt nicht selbstverständlich. Andererseits kannst
du das ja relativ problemlos überprüfen, indem du MySQL ein slow-query-
log schreiben läßt und dann schaust, ob destimme Queries häufig da drin
stehen.

> Das ist aber in einem Open Source Projekt mit >60.000 Zeilen in PHP-Dateien
> nicht ganz einfach und so ruck-zuck machbar wenn man nicht den ganzen Tag
> Zeit hat.

Die Mitleidstour zieht nur noch sehr selten.

> Deshalb hab ich mich auch an diese NG gewendet ... vielleicht ist
> bei der Applikation "Mysql" ja was falsch konfiguriert, das einem Experten
> bei den Symptomen gleich auffällt ... wäre doch durchaus möglich?

Möglich ist vieles, nur müßte der fragliche Experte dazu erstmal
*irgendwas* verwertbares wissen. Bislang ist als einziges bei mir
angekommen, daß du weder Experte bist noch Experten kennst noch
über die Kohle verfügst, einen Experten zu kaufen.

> Ausserdem lief die Anwendung unter ähnlichen Zugriffsraten schon auf einem
> ähnlich dimensioniertem Server (ohne Xen und ohne 2. größere Website)

???

Soll das heißen, das ist gar kein richtiger Server, sondern so eine
virtuelle Krücke? Und du teilst dir die physikalische Hardware mit
einer anderen leistungshungrigen Anwendung?

Das würde immerhin die seltsamen iostat Meßwerte erklären (100%
utilization bei 5 reads/sec sind offensichtlich Blödsinn). Falls die
Meßwerte aber die Realität widerspiegeln, dann kann man ganz klar
sagen, daß die virtuelle Hardware nichts taugt.

> Nicht immer wenn jemand sagt "die Hardware ist zu klein" ist die Erde eine
> Scheibe ;-)
>
> P.S. größere Hardware wird es erstmal nicht geben, deshalb "letzte Hoffnung"
> ... wenn wir das nötige Geld hätten, wären wir nicht bei 1&1 ;-)

Dann ist mein bester Rat an dich: laß es! Wenn dein Projekt nicht mal
genug Bewunderer hat, daß die ca. EUR 50,- pro Monat für einen
richtigen Rootserver zusammen kommen, dann ist das Ding ohnehin tot.


XL

Re: Lost connection to MySQL server during query

am 12.11.2006 13:39:33 von Helmut Chang

Oliver Dietz schrieb:

>>> Als letzte Hoffnung bleibt mir noch mit EXPLAIN die Nadel im Heuhaufen zu
>>> suchen und evtl. ein paar schlecht indizierte Abfragen zu optimieren ...
....
> Selbstverständlich sind IMHO alle wesentlichen Abfragen schon mit EXPLAIN
> bei der Entwicklung überprüft worden.

Das kann man aus deiner obigen nochamls zitierten Aussage schließen?
Genau das hat mich nämlich zum Grinsen gebracht: Als letzte Hoffung...

> Falls du dir die Abfragestrategie mal ankucken möchtest kann ich dir gerne
> ein paar Beispiele / den Quellcode / Datenbankschema zukommen lassen.

Danke. Aber ich glaube nicht, dass du dir das leisten kannst, wenn:

> ... wenn wir das nötige Geld hätten, wären wir nicht bei 1&1 ;-)

Nix für ungut ;-).

gruss, heli

Re: Lost connection to MySQL server during query

am 12.11.2006 14:19:08 von Oliver Dietz

Hi Axel,

>> Nicht immer wenn jemand sagt "die Hardware ist zu klein" ist die Erde
>> eine
>> Scheibe ;-)
>>
>> P.S. größere Hardware wird es erstmal nicht geben, deshalb "letzte
>> Hoffnung"
>> ... wenn wir das nötige Geld hätten, wären wir nicht bei 1&1 ;-)
>
> Dann ist mein bester Rat an dich: laß es! Wenn dein Projekt nicht mal
> genug Bewunderer hat, daß die ca. EUR 50,- pro Monat für einen
> richtigen Rootserver zusammen kommen, dann ist das Ding ohnehin tot.

gute Idee.
Damit ist mein Problem gelöst.

Danke,
Oliver