Hallo,
wir haben ein Problem mit Deadlocks auf unserer MySQL 5.5 Datenbank.
Ausgangssituation:
Problem war, dass wenn mehrere Anwendungen auf die Datenbank editierend (UPDATE, INSERT) zugegriffen haben, dies gleichzeitig passierte und es zu DEADLOCKS kam. Daraufhin haben wir gedacht, dass wir LOCK-Statements implementieren und dadurch alles besser wird. Pustekuchen!
Gefühlt wurde es schlimmer.
Das LOCKEN von Tabellen sollte eigtl. auch nur eine vorrübergehende Lösung sein.
Nun haben wir aber das Problem, dass wenn Select-Statements zwischen das LOCKen von Tabellen kommt, diese beiden Threads sich gegenseitig sperren.
Beispiel:
Thread1:
Select * From tabelle1 where id=54785;
// sagen wir, die Abfrage dauert ca. 1min und wurde um 12:45:00 angestoßen
dann kommt ein 2ter Thread:
Thread2:
Lock Table tabelle1 WRITE;
update tabelle1 set sum=15 where id=5;
UNLOCK TABLES;
// sagen wir diese Transaktion wird um 14:45:10 angestoßen
Wenn genau dieser Fall eintrifft, dann Sperren sich die beiden Threads gegeneinander und es kommt nie zu einem Ergebnis!
Hat jemand vielleicht eine Ahnung wie man dieser Problematik aus dem Weg gehen kann ?
Beste Grüße,
Mike
wir haben ein Problem mit Deadlocks auf unserer MySQL 5.5 Datenbank.
Ausgangssituation:
Problem war, dass wenn mehrere Anwendungen auf die Datenbank editierend (UPDATE, INSERT) zugegriffen haben, dies gleichzeitig passierte und es zu DEADLOCKS kam. Daraufhin haben wir gedacht, dass wir LOCK-Statements implementieren und dadurch alles besser wird. Pustekuchen!
Gefühlt wurde es schlimmer.
Das LOCKEN von Tabellen sollte eigtl. auch nur eine vorrübergehende Lösung sein.
Nun haben wir aber das Problem, dass wenn Select-Statements zwischen das LOCKen von Tabellen kommt, diese beiden Threads sich gegenseitig sperren.
Beispiel:
Thread1:
Select * From tabelle1 where id=54785;
// sagen wir, die Abfrage dauert ca. 1min und wurde um 12:45:00 angestoßen
dann kommt ein 2ter Thread:
Thread2:
Lock Table tabelle1 WRITE;
update tabelle1 set sum=15 where id=5;
UNLOCK TABLES;
// sagen wir diese Transaktion wird um 14:45:10 angestoßen
Wenn genau dieser Fall eintrifft, dann Sperren sich die beiden Threads gegeneinander und es kommt nie zu einem Ergebnis!
Hat jemand vielleicht eine Ahnung wie man dieser Problematik aus dem Weg gehen kann ?
Beste Grüße,
Mike
Comment