我在MySQL中面臨死鎖。如何配置MySQL在遇到死鎖時自動重新啓動事務?死鎖後在MySQL中重新啓動事務
7
A
回答
6
由於兩個事務試圖修改相同的數據,所以無法自動執行此操作。如果你知道只是再次重試相同的語句將是正確的事情,你需要在你的應用程序中實現它。
但是讓數據庫自動執行這樣做是不負責任的,因爲在發佈可能的修改語句(如果有的話)之前,您的應用程序首先需要查看數據庫中的新情況。
3
通常情況下,您必須編寫應用程序,以便它們隨時準備重新發出事務,如果它由於死鎖而回滾。
http://dev.mysql.com/doc/refman/5.1/en/innodb-deadlocks.html
手動表明,沒有這樣的配置選項存在。
+0
你可以發佈一些Java客戶端示例代碼(與休眠)重試回滾事務? –
0
那麼,你不能,也不會有意義。這取決於您的應用程序是否應對了死鎖問題,以及它的完成方式很大程度上取決於您的業務邏輯,例如,捕捉異常,等待幾秒鐘,重試x次...
3
重新啓動一個事務是指:
- (任選地)啓動一個新的數據庫連接手柄;
- 執行第一個啓動新事務的函數/行代碼,並重試整個執行路徑,直到
commit
。
因爲數據庫引擎不可能知道這會死鎖發生後已執行的查詢,不能重試整個事情對你(更何況還有可能是這將可能執行基於不同的查詢應用程序邏輯新更改的數據庫數據)。
相關問題
- 1. 在死鎖後重新提交事務
- 2. 如何在Java中死鎖或超時後重新啓動事務?
- 3. mysql事務死鎖
- 4. Hibernate會在死鎖時自動重啓事務嗎?
- 5. 重新提交死鎖事務php
- 6. 解決MySQL錯誤「嘗試獲取鎖定時發現死鎖;嘗試重新啓動事務」
- 7. 如何自動重新運行死鎖事務? (ASP.NET MVC/SQL Server)
- 8. 事務死鎖TX
- 9. 事務死鎖SqlMembershipProvider.CreateUser()
- 10. 在Session-Per-Request Web環境中發生死鎖後重新發生事務
- 11. 嘗試鎖定時發現死鎖;嘗試重新啓動
- 12. MySql:事務不檢測死鎖?
- 13. 安卓服務在應用程序死機後重新啓動
- 14. 如何使用Doctrine在死鎖後重試事務?
- 15. 如何在重新啓動後立即啓動鎖屏活動?
- 16. 重新啓動服務器後重新啓動WCF服務
- 17. JDBC + MySQL:在鎖等待或死鎖的情況下重試事務
- 18. ActiveRecord :: StatementInvalid·Mysql2 :: Error:嘗試獲取鎖定時發現死鎖;嘗試重新啓動事務:
- 19. SQLSTATE [40001]:序列化失敗:1213嘗試獲取鎖定時發現死鎖;嘗試重新啓動事務:symfony2
- 20. Mysql2 ::錯誤:嘗試獲取鎖時發現死鎖;嘗試重新啓動事務:INSERT INTO
- 21. Android服務被強行殺死後重新啓動的時間
- 22. Mysql在重新啓動後恢復ONLY_FULL_GROUP_BY
- 23. SQL Server 2005:事務死鎖
- 24. 清除事務死鎖?
- 25. 事務死鎖和的DbContext
- 26. nhibernate事務死鎖問題
- 27. grails服務與MySQL鎖死
- 28. 重新啓動的服務,在debian postinst腳本中死亡。
- 29. Mysql select ...更新死鎖
- 30. 重新啓動服務器後重新啓動Docker容器
您可以發佈一些客戶端示例代碼在Java(與休眠)用於重試回滾事務。 –