MySQL JDBC: Gibt es eine Option für die automatische Wiederholung nach InnoDB Deadlock?

9

Ich bin Working um MySQL-Fehler "Deadlock gefunden beim Versuch, Sperre zu bekommen; Versuchen Sie, die Transaktion "

erneut zu starten

Ich habe festgestellt, dass die Transaktion sicher erneut versucht werden kann

  

Deadlocks sind nicht gefährlich. Versuchen Sie es erneut.
Ссылка

Es gab eine einzelne Anweisung "super insert..select", die in die Engpass-Tabelle eingefügt wurde, nachdem eine verbundene Kombination aus zwei anderen Tabellen ausgewählt und Unteranweisungen in der Engpass-Tabelle sowie einige kleine Tabellen verwendet wurden.

Der Flaschenhals wartete "auf das Schloss", er wartete ohne Zweifel auf Schreibsperre. InnoDB schien die perfekte Lösung zu sein. (für Schreib-schweren Tisch) Und die Zögereien über diese eine Aussage sind jetzt alle weg.

Aber jetzt tritt das Problem auf: Für jeweils 100 Ausführungen der Anweisung werden etwa 1 oder 2 von ihnen aufgrund des Deadlocks fehlschlagen. Ich glaube, der Deadlock tritt nur zwischen den Instanzen des "Super insert..select" auf. Ich werde eine automatische Wiederholung dieser Anweisung installieren, aber ich habe mich gefragt

Frage: Hat MySQL JDBC eine Option, um die automatische Wiederholung von Anweisungen nach Erhalt der Ausnahme zu aktivieren, oder muss ich meinen eigenen Code dafür schreiben?

%Vor%

In diesem Fall habe ich keine Transaktion starten oder Transaktionsbefehle stoppen. Genau diese eine Anweisung "super insert..select"

    
George Bailey 08.08.2011, 20:08
quelle

1 Antwort

5

Sie können die Aussage wiederholen, aber in einer perfekten Welt sollten Sie Ihre Transaktion zurücksetzen und neu starten. Und Ihre Transaktionen wären in dieser Welt kurz:)

    
Vlad 08.08.2011, 20:22
quelle

Tags und Links