Jestem Working around MySQL error “Deadlock found when trying to get lock; try restarting transaction”MySQL JDBC: Czy istnieje opcja automatycznego ponawiania po zakleszczeniu InnoDB?
I okazało się, że transakcja może być bezpiecznie reattempted
zakleszczenia nie są niebezpieczne. Po prostu spróbuj ponownie.
http://dev.mysql.com/doc/refman/5.0/en/innodb-deadlocks.html
Jest tylko jedno „super insert..select” oświadczenie, że wstawiane do tabeli wąskiego gardła po wybraniu dołączył combo dwóch innych tabel i przy użyciu zwrotów warunków sub na stole wąskiego gardła, a także kilka maleńkich stolików.
Szyjka butelki "czekała na zamek", czekała na blokadę zapisu bez wątpienia. InnoDB wydawało się idealnie dopasowane. (dla stołu z dużym ciężarem pisania) A teraz wahania w tym jednym stwierdzeniu zniknęły.
Ale teraz pojawia się problem: na każde 100 egzekucji oświadczenia, 1 lub 2 z nich zakończy się niepowodzeniem z powodu impasu. Uważam, że impas występuje tylko między instancjami "super insert..select". Będę zainstalować powtórzenie auto z tym stwierdzeniem, ale zastanawiałem
Pytanie: Czy MySQL JDBC ma możliwość włączenia automatycznego ponownego oświadczenia po otrzymaniu wyjątek, czy też muszę napisać własny kod że?
com.mysql.jdbc.exceptions.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction
W tym przypadku nie mam poleceń rozpoczęcia transakcji ani zatrzymania transakcji. Tylko jedna instrukcja "super insert..select"
Przyjmuję, że odpowiedź brzmi: nie. –
@GeorgeBailey Odpowiedź jest ponowną próbą całej transakcji, a nie tylko wyciągu. – EJP