mmofacts.com

MySQL macht was es will

gepostet vor 18 Jahre, 12 Monate von MannaZ
Hi ich bins - und schon wieder habe ich ein Problem.

Und zwar hat bei mir in letzter Zeit immer öffter MySQL so seine "Mätzchen".
Es sieht so aus, als würde es ganze Querys einfach "vergessen".
Rohstoffdaten werden nicht aktualisert, Boni nicht eingetragen, Items verschwinden bei einer Tabellentransaktion, usw..

Nur ich kann mir das ganze in keinster weise erklähren, da weder MySQL noch sonnstige Serversoftware einen Fehler liefert.

Ich verwende ganz simple Querys wie diese hier zb:
SELECT `name`, `time` FROM `tablename` WHERE `bla`='blub' LIMIT 1;

UPDATE `tablename` SET `foo`='bar', `rubish`='rubval' WHERE `key`='val';
....
und versuche den großteil der Berechnung von PHP durchführen zu lassen.

Meine Frage an die BG-Veteranen unter euch - ist euch schon einmal soetwas untergekommen? Woran kann das liegen? Was kann ich dagegen machen?
Fals ich etwas nicht erwähnt habe, was eventuell noch wichtig währe, zögert bitte nicht es mir mitzuteilen :wink: .
gepostet vor 18 Jahre, 12 Monate von Kampfhoernchen
In der Regel kannst du keine 2 Querys gleichzeitig absetzen, also

$query = "SELECT `name`, `time` FROM `tablename` WHERE `bla`='blub' LIMIT 1;
UPDATE `tablename` SET `foo`='bar', `rubish`='rubval' WHERE `key`='val';"
funktioniert nicht
gepostet vor 18 Jahre, 12 Monate von exception
Original von MannaZ
Hi ich bins - und schon wieder habe ich ein Problem.

Und zwar hat bei mir in letzter Zeit immer öffter MySQL so seine "Mätzchen".
Es sieht so aus, als würde es ganze Querys einfach "vergessen".
Rohstoffdaten werden nicht aktualisert, Boni nicht eingetragen, Items verschwinden bei einer Tabellentransaktion, usw..

Nur ich kann mir das ganze in keinster weise erklähren, da weder MySQL noch sonnstige Serversoftware einen Fehler liefert.

Ich verwende ganz simple Querys wie diese hier zb:
SELECT `name`, `time` FROM `tablename` WHERE `bla`='blub' LIMIT 1;

UPDATE `tablename` SET `foo`='bar', `rubish`='rubval' WHERE `key`='val';
....
und versuche den großteil der Berechnung von PHP durchführen zu lassen.

Meine Frage an die BG-Veteranen unter euch - ist euch schon einmal soetwas untergekommen? Woran kann das liegen? Was kann ich dagegen machen?
Fals ich etwas nicht erwähnt habe, was eventuell noch wichtig währe, zögert bitte nicht es mir mitzuteilen :wink: .


Kann es evtl sein, dass diese Fehler durch parallele Ausführung passieren? Dass also erst beide Prozesse die alten Werte einlesen, dann jeweils auf die gleichen Daten die Berechnungen durchführen und dann beide die Werte in die DB schreiben. Der zuerst in die DB geschriebene Wert wird dann natürlich überschrieben.

Die Rückgabewerte aller mysql-Aufrufe prüfst du jedesmal, oder?
gepostet vor 18 Jahre, 12 Monate von MannaZ
@Kampfhörnchen:
Schon klar - ich hab nur mehrere angegeben um einen überblick zu bieten.

@exception:
das währe eine möglichkeit - nur habe ich mit Table_lock nur schlechte erfahrungen gemacht.
Und rückgabewerte überprüfe ich auch nicht jedesmal.
gepostet vor 18 Jahre, 12 Monate von KoMtuR
wenn du mit tablelock schlechte erfahrung gemacht hast dann nehme doch semaphores. ist denk ich mal ein guter ausweg
gepostet vor 18 Jahre, 12 Monate von MannaZ
Original von KoMtuR
wenn du mit tablelock schlechte erfahrung gemacht hast dann nehme doch semaphores. ist denk ich mal ein guter ausweg


Tut mir leid, aber ich kann mit dem begriff "semaphores" überhaupt nichts anfangen .
gepostet vor 18 Jahre, 12 Monate von Klaus
Flügelsignale

ne, eigentlich würde ich es auch gerne wissen.
gepostet vor 18 Jahre, 12 Monate von KoMtuR
Semaphores sind im Prinzip das gleiche, wie Türsteher, aber nicht auf Datenbanken beschränkt, sondern für alles anwendbar. Sozusagen ein "Lock Table" für alles mögliche. Damit ein Skript exklusiven Zugriff auf einen bestimmten Berecih (Speicher, Tabelle, Datei, etc.) hat setzt es den semaphore auf einen Status und setzt ihn wieder zurück (normal sollte der Wert zurückgesetzt werden, wenn der Thread endet), wenn er fertig ist. Kommt nun derweilen ein anderer Typ und will genau das Gleiche machen und das semaphore hat noch den Status "besetzt", so wartet das Script mmit der Ausführung, bis der andere Typ verschwunden ist und beginnt das Spiel von vorne.

Vorstellbar mit nem Dixiklo. Wenn rot dann warten. Wenn grün dann aufs Klo

http://de2.php.net/manual/en/ref.sem.php
gepostet vor 18 Jahre, 12 Monate von Amun Ra
Hat damit irgendwer praktische Erfahrungen ??
Ich muss auch ein Lock Table setzen...
Wäre vielleicht ne Alternative.
gepostet vor 18 Jahre, 12 Monate von Klaus
hehe prima, ich wollte mich schon fast dort anmelden. :lol:

Also wenn ich jetzt deinen Filelock anwenden, dann müssen alle anderen warten, die diese Datei auch verwenden wollen. Enstehen so nicht lange Wartezeiten?
gepostet vor 18 Jahre, 11 Monate von MannaZ
Original von TheUndeadable
http://browsergames.net/attachment.php?attachmentid=39&sid=3175ba33462f350806963c4cc507ec60 <- Ich hatte mal vor längerer Zeit nen kurzen Artikel geschrieben.

Fragen bitte entgegen der Angabe nicht im BG.Net-Forum stellen, sondern eher hier ;-).


Leider lässt sich das Attachment nicht korrekt downloaden.
Kannst du den Text vielleicht so nocheinmal hier drinnen posten?!

Inzwischen arten die Fehler bei mir immer mehr aus - die Datenbank ist anscheinend am Boden.

Auf diese Diskussion antworten