Deadlock/Lock Problem

Mike90

Bekanntes Mitglied
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
 

Lumaraf

Bekanntes Mitglied
Was für einen Tabellentyp verwendest du? Ich tippe mal auf MyISAM, da hat man häufig Probleme mit SELECTs die Änderungen an der Tabelle blockieren.
 

jwiesmann

Bekanntes Mitglied
Was du beschreibst ist auch eigentlich so gewollt.
Da das Select wahrscheinlich auch die Tabelle sperrt.

Was helfen könnte wäre sowas:
SQL:
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
Select * From tabelle1 where id=54785;

Dann wird dein Select nicht geblockt bzw. dein Select blockt dann nix.
Sollte es grundsätzlich so sein, kann man es auch global setzen.

SQL:
SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;

btw. wenn dein Statement so lange braucht .. versuchs mal mit limit / create index ...
 

ice-breaker

Top Contributor
Wenn genau dieser Fall eintrifft, dann Sperren sich die beiden Threads gegeneinander und es kommt nie zu einem Ergebnis!
mit deinem vereinfachten Beispiel ist dieses Verhalten nicht möglich.
Denn Thread1 hält einen Lese-Lock auf tabelle1 deswegen muss der Write-Lock von Thread2 warten, wenn Thread1 fertig ist, erst dann bekommt Thread2 den Lock zugeteilt.
Deine Vermutung der Problemursache ist also falsch ;)
Ihr solltest also ggf. nochmal das Grundproblem der Datenbank untersuchen und dieses beheben. Transaktionen mit InnoDB würden z.B. das Problem, dass sich Reads und Writes gegenseitig blockieren komplett aufheben, dann können nur noch Writes auf die gleichen Daten konkurrieren.

Hat jemand vielleicht eine Ahnung wie man dieser Problematik aus dem Weg gehen kann ?
gar kein manuelles Locking nutzen?
Und den Query von Thread1 eventuell soweit vereinfachen oder optimieren, dass es er schneller läuft oder den Query auf mehrere kleinere Querys aufteilen.
Wenn alle Querys nur ganz kurz arbeiten, hat man keine langen Locks im System und solche Probleme treten einfach nicht auf.
 
Zuletzt bearbeitet:
G

Gast2

Gast
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

InnoDB mit SELECT ... FOR UPDATE?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Ghostman1711 PostgreSQL Lock Row Exclusive Mode Transaktionsblock Datenbankprogrammierung 0
OnDemand Lock wait timeout exceeded; try restarting transaction Datenbankprogrammierung 0
R Acces Row Lock Datenbankprogrammierung 2
J PC-Start Problem JDBC Connection Datenbankprogrammierung 10
C Problem mit Apache Poi Datenbankprogrammierung 6
N HSQLDB Problem mit Eclipselink in runnable Jar Datenbankprogrammierung 10
P GroupLayout-Problem Datenbankprogrammierung 12
F XAMPP max connections problem Datenbankprogrammierung 6
C MySQL Problem in phpMyAdmin Oberfläche Datenbankprogrammierung 5
C Problem with INSERT.............ON DUPLICATE KEY Datenbankprogrammierung 3
C Problem with insertion in database. Datenbankprogrammierung 7
F Problem mit Hibernate c3p0 Datenbankprogrammierung 2
W Problem mit Insert in zwei Tabellen Datenbankprogrammierung 8
G MySQL Problem mit MySQL verbindung Datenbankprogrammierung 8
A kleines Problem Datenbankprogrammierung 6
T Problem mit Datenbankverbindung Datenbankprogrammierung 22
V Derby/JavaDB updateRow Problem Datenbankprogrammierung 0
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
Nuiton EmbeddedDriver Problem Datenbankprogrammierung 6
A MongoDB Passwort Problem Datenbankprogrammierung 0
O HSQLDB Hibernate Criteria Problem Datenbankprogrammierung 3
F MySQL JDBC Problem Datenbankprogrammierung 5
Anfänger2011 Datenbankstruktur/aufbau (theoretisches Problem) Datenbankprogrammierung 5
M Derby/JavaDB Drop Database problem Datenbankprogrammierung 3
M Derby/JavaDB NOT LIKE problem Datenbankprogrammierung 19
N HSQLDB Problem mit EntityManager Datenbankprogrammierung 7
B MySQL JPAContainer Problem Datenbankprogrammierung 4
K Eclipse Apache Derby Treiber Problem Datenbankprogrammierung 4
C Problem oder Denkfehler mit H2-Database Datenbankprogrammierung 3
E Wie kann man das Problem mit der BLOB-Spalte lösen? Datenbankprogrammierung 1
M Problem mit jcouchdb und CouchDB - UTF8 kein gültiger Zeichentyp Datenbankprogrammierung 4
T MySQL Problem mit Datenbankanbindung Datenbankprogrammierung 4
M INSERT-Problem = integrity constraint violation: foreign key no parent Datenbankprogrammierung 5
P SQL Query Problem Datenbankprogrammierung 14
A MySQL Problem bei Tabelle ausgeben Datenbankprogrammierung 3
Q MySQL JDBC-Treiber Problem Datenbankprogrammierung 2
B SQLite Problem bei Planung der Datenbank [Jeopardy] Datenbankprogrammierung 3
A Problem mit dem Import und Export von Bildern Datenbankprogrammierung 4
P Oracle Problem mit Umlauten Datenbankprogrammierung 9
A Problem mit Create-Statement Datenbankprogrammierung 9
D Problem mit COLUMN_IDENTIFIERS Datenbankprogrammierung 8
Bluedaishi MySQL Abfrage Problem :-) Datenbankprogrammierung 21
M Problem mit mehreren Datasourcen Datenbankprogrammierung 3
R Resultset.last() Problem Datenbankprogrammierung 12
M Problem GroupBy Datenbankprogrammierung 3
S CURRENT_DATE problem Datenbankprogrammierung 2
M Problem mt JPA Id-Generators Datenbankprogrammierung 18
Gossi Oracle Problem mit group by... Datenbankprogrammierung 22
M MySQL SQL Abfrage Problem Datenbankprogrammierung 6
R MS-SQL Express Login-Problem Datenbankprogrammierung 8
P Lazy-Fetchig und Session-Problem mit Hibernate Datenbankprogrammierung 4
N HSQLDB Problem beim Treiberladen im Jar Datenbankprogrammierung 6
M Problem beim Erstellen einer Query Datenbankprogrammierung 7
C Hibernate ManyToMany zusammengesetzter Primärschlüssel, problem. Datenbankprogrammierung 3
M Problem mit HQL Syntax Datenbankprogrammierung 5
K Db4o Delete Problem Datenbankprogrammierung 11
T Access 32bit on Win7 64Bit ODBC Problem Datenbankprogrammierung 1
C unverständliches DB Problem (Es ist kein temporärer Systemtabellenbereich mit einer ausreichenden..) Datenbankprogrammierung 5
S ODBC Treiber Problem/oder unvermögen Datenbankprogrammierung 18
J Problem bei Boolean in PreparedStatement Datenbankprogrammierung 5
C MySQL Problem mit UPDATE Abfrage Datenbankprogrammierung 13
C Problem mit SQL-Abfrage Datenbankprogrammierung 5
K Problem mit Datenbankverbindung via Eclipse Datenbankprogrammierung 2
A Problem mit Eintragen von Daten in eine Datenbank mittels DAO Datenbankprogrammierung 4
S Oracle Problem mit PreparedStatement.setString(1,"str") Datenbankprogrammierung 10
B MySQL Problem mit Datenbankanbindung an MySQL Datenbankprogrammierung 2
N Problem bei Erstellung eines Index Datenbankprogrammierung 12
C Hibernate Property-Problem Datenbankprogrammierung 5
J MyBatis - Update Problem Datenbankprogrammierung 4
S JPA: Problem mit Update von Daten Datenbankprogrammierung 7
c_sidi90 Hibernate Problem Table doesnt excist Datenbankprogrammierung 8
M Problem mit JPA - OneToMany-Relation Datenbankprogrammierung 3
I Hibernate: Composite Foreign Key Problem Datenbankprogrammierung 14
S JPA OptimisticLocking Problem Datenbankprogrammierung 11
I Derby/JavaDB Problem mit Befüllung von Tabelle Datenbankprogrammierung 7
JavaKaffee Derby/JavaDB Quartz-WebAnwendung - Connection/Treiber Problem Datenbankprogrammierung 47
I Problem mit ResultSet Datenbankprogrammierung 2
L Excel in MySQL importieren Problem Datenbankprogrammierung 5
S Problem beim Anlegen einer Tabelle Datenbankprogrammierung 5
R MS Access mit Java Problem mit Update Statment Datenbankprogrammierung 13
S MySQL Problem mit SELECT bzw encoding Datenbankprogrammierung 4
T Problem beim schreiben von daten Datenbankprogrammierung 4
M MySQL getConnection - Verbindung Problem Datenbankprogrammierung 2
K Hibernate + MySQL Problem... Datenbankprogrammierung 2
I MySQL MySQL – Proxy Problem Datenbankprogrammierung 4
M Problem mit Hibernate und Named Query Datenbankprogrammierung 1
M Problem mit Hibernate und Access Datenbankprogrammierung 9
C firebird problem Datenbankprogrammierung 5
F Problem mit Datenbankabfrage Datenbankprogrammierung 7
K SQL Problem mit Date Datenbankprogrammierung 3
jeppi MySQL Design-Problem: DB-Verbindung herstellen und halten - JdbcRowSet / Idle-Timeout? Datenbankprogrammierung 9
J sql abfrage ... Problem mit Datumswert Datenbankprogrammierung 3
G MySQL Connection Problem Datenbankprogrammierung 3
O MySQL Problem mit Umlauten?! Datenbankprogrammierung 2
E Hibernate Problem bei bidirektionaler 1:n Verbindung Datenbankprogrammierung 2
D MySQL Problem beim einfügen von Double-Zahlen Datenbankprogrammierung 4
M Oracle Problem mit Resultset Datenbankprogrammierung 11
T Problem bei Zugriff auf Access Datenbank Datenbankprogrammierung 7
W jpmdbc Problem -Beispiel funktioniert nicht Datenbankprogrammierung 9
W Verständnis-Problem JPA Grundlagen Datenbankprogrammierung 5

Ähnliche Java Themen

Neue Themen


Oben