MySQL --- Problem mit Sleep-Prozessen

Werewolf

Lose-Jack Webbie
ID: 123748
L
20 April 2006
1.095
95
Hi

Ich hab mich mit MySQL noch net wirklich befasst, deswegen hab ich da nun auch keine ahnung, woher mein problem kommt, und was ich effektiv dagegen tun kann

mir ist aufgefallen, das ich ab und zu mal einen Sleep-Prozess habe, der sich nicht mehr beendet, und die Prozessorauslastung nahezu auf 100% treibt.

Frage nun: woher kommt so ein Sleep-Prozess, und was kann ich tun, damit die doch beendet werden?

Bringt es was, wenn ich die wait_timeout und die interactive_timeout auf vielleicht 10 sekunden stelle?

Wenn ja: wo kann ich das machen?
 
dein "sleep-prozess" entsteht aus einem nicht beenden script bzw. einer nicht beendeten mysql-verbindung.
da php standardmäßig alle verbindungen beim script-ende trennt, denke ich läuft da noch ein script, was nach seinen 30sec nicht abbricht sondern scheinbar wohl immernoch läuft.
oder kann es sein, dass bei einem fehler beim parsen keine verbindung getrennt wird? halte ich aber für unwahrscheinlich
 
nein, ich hab schon mysql_connect() verwendet :(

und ansonsten ist das problem bei einem Flash-Slot. Wüsste nicht, was es da für ein Sccript geben sollte, das nicht beendet wird,

deswegen will ich ja auch die beiden variablen verändern.
 
Am ende der index bzw deiner scripts mysql_close($con); machen, &con ist in diesem fall die verbindung zur db!
 
Es kommt bei einem bestimmten Slot, bei dem die Datenbank-Abfragen aber eigentlich die gleichen sind wie bei den anderen Games.

Es ist bei jedem User, aber nur ab und zu, manchmal auch häufig. Es hilft halt immer nur der Server-Neustart
 
Am ende der index bzw deiner scripts mysql_close($con); machen, &con ist in diesem fall die verbindung zur db!
PHP schließt Datenbankverbindungen selbst wieder wodurch man mysql_close() eigentlich kaum braucht

Es kommt bei einem bestimmten Slot, bei dem die Datenbank-Abfragen aber eigentlich die gleichen sind wie bei den anderen Games.

Es ist bei jedem User, aber nur ab und zu, manchmal auch häufig. Es hilft halt immer nur der Server-Neustart
neija du solltest mal nach dem Grund suchen WIESO bei dem einen slot manchmal das Problem auftritt, denn sonst können wir dir nicht helfen, denn ne Glaskugel haben wir und du auch nicht ;)
 
neija du solltest mal nach dem Grund suchen WIESO bei dem einen slot manchmal das Problem auftritt, denn sonst können wir dir nicht helfen, denn ne Glaskugel haben wir und du auch nicht ;)

Ich kanns mir halt nicht erklären, es gibt da nur Datenbankabfragen die entweder einfügen, updaten, oder auslesen.

Kann es evtl sein, das ne Tabelle zu groß wurde? Hatte da mal nen anderen fall, das da so viele einträge waren, das keine neuen mehr gemacht wurden (warum das so war weiss ich auch net genau *lol*)

Oder können so Sleep-Prozesse von falschen abfragen kommen? Bin mir zwar ziemlich sicher, das ich keine fehlerhaften abfragen habe, aber vielleicht gugg ich dann doch noch mal ganz genau nach
 
PHP schließt Datenbankverbindungen selbst wieder wodurch man mysql_close() eigentlich kaum braucht

In der Regel ja ... aber nicht, wenn die Prozesse permanent sind, z.B. wenn irgendwelche Beschleunigungstools im Server integriert sind oder ähnliches. Man macht nichts falsch, wenn man ein close macht, im Gegenteil.

Hast du die Möglichkeit ein Mysql-Log zu aktivieren? Sollte bei einem eigenen Server zumindest kein Problem sein. Dann kannst du anhand der Sleep-Prozess-ID genau schauen, was mit dieser Verbindung bis dahin geschehen ist (Connects, SQL-Anweisungen etc.).

Alternativ könntest du die mysql_* Funktionen mit Wrappern ersetzen, die jeden Aufruf genau protokollieren. Auch dann hättest du mehr Hinweise, die dich zur Lösung des Problems bringen könnten.

Ansonsten sehe ich keine Möglichkeit, da weiterzukommen, wenn du absolut keine Ahnung hast, woran es liegen könnte oder wo du suchen sollst ...
 
Wie ich im ersten Post schon zu verstehen gegeben habe, habe ich mich nicht weiter groß mit mysql befasst, da ich einfach den Sinn gesehen habe, das ich da ne Datenbank habe, in die ich relativ einfach daten ein und auslesen kann.

So, deswegen könnte man vielleicht auch sagen, das ich in sachen MySQL n Laie bin, da ich eben nicht genau weiss, was da alles dahinter steckt.

Deswegen weiss ich nun auch nicht, wie ich nen Log erstellen kann, und ich weiss auch nicht, was Wrapper sind.

Aber dafür denke ich ist ja das Forum mit seinen (hoffentlich) hilfsbereiten mitgliedern ja da, das mir das erklärt wird...
 
LOL - dachte ich auch irgendwie :)

Naja, vielleicht war seine Platte voll ... aber an Mysql kann es wohl kaum gelegen haben, da habe ich schon mit GByte-grosse Tabellen mit zig Millionen Einträge problemlos arbeiten können.

Ich habe mit MySql nen Server schon zum Stillstand bekommen^^ Aber das ist nen andres Thema, aber normalerweise sollte dies nicht passieren, denn MySql ist ja für riesige Dateimengen entwickelt worden.
 
Ich habe mit MySql nen Server schon zum Stillstand bekommen^^ Aber das ist nen andres Thema, aber normalerweise sollte dies nicht passieren, denn MySql ist ja für riesige Dateimengen entwickelt worden.

naja, ich hatte da mal ne tabelle mit knapp über 500k einträgen. Und irgendwann haben die gleichen Scripts da eben einfach nichts mehr reingschrieben, bis ich n paar ältere einträge raus habe. Hab mich damit halt nich weiter befasst, sondern hab nen Cron geschrieben, der mir jetzt von zeit zu zeit die alten einträge wieder löscht.
 
naja, ich hatte da mal ne tabelle mit knapp über 500k einträgen. Und irgendwann haben die gleichen Scripts da eben einfach nichts mehr reingschrieben, bis ich n paar ältere einträge raus habe. Hab mich damit halt nich weiter befasst, sondern hab nen Cron geschrieben, der mir jetzt von zeit zu zeit die alten einträge wieder löscht.

Wenn man sagt das die Spalte vom Typ mediumint ist und dieses eben nur (bespiel) von 1-500k geht, und du alle zahlen belegt hast, kann es eben nichts mehr speichern, stark vereinfacht (auto_increnment macht diesem simplen beispiel natürlich nen strich durch die rechnung)

Es war auch keines falles böse gemeint, es ging nur darum um einschätzen zu können, in wie weit man mit dir "fachsimpeln" kann, aber da du ja selbst sagst, das du kaum ahnung hast, würde ich mir irgendjemanden für lose/euro suchen, der sich dem problem mal annimmt ;) denn wenn ein server sich aufhängt ist das ja nicht lustig
 
Wenn man sagt das die Spalte vom Typ mediumint ist und dieses eben nur (bespiel) von 1-500k geht, und du alle zahlen belegt hast, kann es eben nichts mehr speichern, stark vereinfacht (auto_increnment macht diesem simplen beispiel natürlich nen strich durch die rechnung)

Ich habe da nen auto_increment, aber da lag wohl nicht das problem, da jetzt wieder einfach munter weitergezählt wird :)

Es war auch keines falles böse gemeint, es ging nur darum um einschätzen zu können, in wie weit man mit dir "fachsimpeln" kann, aber da du ja selbst sagst, das du kaum ahnung hast, würde ich mir irgendjemanden für lose/euro suchen, der sich dem problem mal annimmt ;) denn wenn ein server sich aufhängt ist das ja nicht lustig

Gut, dann hab ichs falsch verstanden, aber das mit dem Loggen hört sich trotzdem mal gut an, da muss ich wenn ich das vorhin richtig gelesen habe, den server mit --log[=file] starten. Muss ich da noch irgendwas beachten?
 
Deswegen weiss ich nun auch nicht, wie ich nen Log erstellen kann, und ich weiss auch nicht, was Wrapper sind.

Aber dafür denke ich ist ja das Forum mit seinen (hoffentlich) hilfsbereiten mitgliedern ja da, das mir das erklärt wird...

Die Devise lautet: Hilft dir selbst, wir geben nur Schubser in die richtige Richtung :biggrin:

Meine Lieblinssprüche: :rtfm: und "Google weiß alles" :LOL:

https://dev.mysql.com/doc/refman/4.1/en/log-files.html
Interessant ist für dich der "General Query Log"

Eine Wrapper-Funktion könnte so aussehen:

function my_mysql_query($query) {
my_loggedaten($query);
return mysql_query($query);
}

Statt nun mysql_query zu benutzen, nutzt du stattdessen my_mysql_query, welche die Wrapper-Funktion ist und die Daten irgendwo protokolliert. Ich bin mir ziemlich sicher, das Prinzip sollte auch in der Wikipedia erklärt sein (wie so vieles). Ich würde in der Log-Funktion aber noch paar Infos mehr loggen, wie z.B. die Prozess-ID oder die zurückgegebene Resource-ID, um die Anweisungen nachher eindeutig zuzuordnen.
 
Jep, ich meine es auch nicht böse ... ;)

Aber wenn man programmieren will, gehört es ja dazu, selbst zu recherchieren, Manuals zu lesen etc. ... und leider hab ich zuviele bis heute getroffen, die keine Lust hatten sich mal eine halbe Seite durchzulesen, auch wenn man ihnen die richtigen Stellen übergibt. Diejenigen haben sich dann das falsche Hobby ausgesucht und das nervt dann irgendwann, wenn man mit Manualfragen gelöchert wird. Bezieht sich nicht auf dich, aber das hab ich nun mal leider immer im Hinterkopf und möchte es nie wieder soweit kommen lassen ...

Ist also nicht böse gemeint, wir wollen dir damit nur helfen :LOL: