Hallo zusammen,
ich habe 2 Threads, die jeweils versuchen, 2 gleiche Entity-Beans auf die Datenbank zu inserten.
Thread 1:
'1' 'Ratna'
'2' 'Sandy'
Thread 2:
'1' 'Ratna'
'2' 'Sandy'
Wir haben also auf JPA-Kontext lediglich eine Anwendungslogik für die 2 Threads.
Ich bin auf Deadlock gestoßen. Auf der Suche nach der Suche habe ich die naheliegendste Ursache gefunden, warum diese INSERTS zu Deadlock führen. Stichwort dafür ist: PrimaryKey-Overlapping. In der Tat ist die 1. Spalte ein PrimaryKey.
Ein gutes Beispiel im Netz ist:
Was ich nicht dahinter komme, ist allerdings:
Wir haben doch aber für die beiden Threads die gleiche Reihenfolge, nicht wie im obigen Beispiel:
S1-1
S2-2
S1-2
S2-1
Stattdessen habe ich ja:
S1-1
S2-1
S1-2
S2-2
Oder
S1-1
S1-2
S2-1
S2-2
Die Reihenfolge, die wir haben, dürfte aber niemals zu einem Deadlock führen.
Daher meine Fragen:
1. Ist es denn wahrscheinlich, dass eine Reihenfolge auf JPA-Context anders sein kann wenn die Statements auf Datenbank-Seite angekommen ist?
Vielen Dank für Eure Hilfestellungen.
Viele Grüße aus Rheinland,
Eure Ratna
ich habe 2 Threads, die jeweils versuchen, 2 gleiche Entity-Beans auf die Datenbank zu inserten.
Thread 1:
'1' 'Ratna'
'2' 'Sandy'
Thread 2:
'1' 'Ratna'
'2' 'Sandy'
Wir haben also auf JPA-Kontext lediglich eine Anwendungslogik für die 2 Threads.
Ich bin auf Deadlock gestoßen. Auf der Suche nach der Suche habe ich die naheliegendste Ursache gefunden, warum diese INSERTS zu Deadlock führen. Stichwort dafür ist: PrimaryKey-Overlapping. In der Tat ist die 1. Spalte ein PrimaryKey.
Ein gutes Beispiel im Netz ist:
Code:
-- Session 1: Insert row 1
BEGIN TRAN
INSERT INTO deadlocks
VALUES (1, 'Pinal', 'SQLAuth')
-- ----------------------
-- Session 2: Insert Row 2
BEGIN TRAN
INSERT INTO deadlocks
VALUES (10, 'SQLAuth', 'Blog')
-- ----------------------
-- Session 1: Insert row 2
INSERT INTO deadlocks
VALUES (10, 'SQLAuth', 'Blog')
-- ----------------------
-- Session 2: Insert Row 1
INSERT INTO deadlocks
VALUES (1, 'Pinal', 'SQLAuth')
Was ich nicht dahinter komme, ist allerdings:
Wir haben doch aber für die beiden Threads die gleiche Reihenfolge, nicht wie im obigen Beispiel:
S1-1
S2-2
S1-2
S2-1
Stattdessen habe ich ja:
S1-1
S2-1
S1-2
S2-2
Oder
S1-1
S1-2
S2-1
S2-2
Die Reihenfolge, die wir haben, dürfte aber niemals zu einem Deadlock führen.
Daher meine Fragen:
1. Ist es denn wahrscheinlich, dass eine Reihenfolge auf JPA-Context anders sein kann wenn die Statements auf Datenbank-Seite angekommen ist?
Vielen Dank für Eure Hilfestellungen.
Viele Grüße aus Rheinland,
Eure Ratna