我有一個長時間運行的事務,在數據庫上執行大量的刪除查詢;問題是mysql連接(到同一臺機器上的服務器)將無緣無故地被丟棄。在底層mysql連接丟失後,有什麼辦法恢復(長)事務嗎?
目前,我的重試邏輯將檢測斷開連接,重新連接並重新開始整個事務,如果連接的「丟棄頻率」過高,這可能永遠不會成功。
是否有可能重新打開丟失的連接以繼續交易?
我正在使用MySQL Connector for .NET。
我有一個長時間運行的事務,在數據庫上執行大量的刪除查詢;問題是mysql連接(到同一臺機器上的服務器)將無緣無故地被丟棄。在底層mysql連接丟失後,有什麼辦法恢復(長)事務嗎?
目前,我的重試邏輯將檢測斷開連接,重新連接並重新開始整個事務,如果連接的「丟棄頻率」過高,這可能永遠不會成功。
是否有可能重新打開丟失的連接以繼續交易?
我正在使用MySQL Connector for .NET。
您提出的問題不適用於交易。事務是確保在數據庫上執行的每個操作都已完成或無。
如果您的連接丟失頻率過高,而您又無法解決問題,那麼您應該做的是在沒有事務的情況下進行簡單查詢,或者更少地減少事務中的操作數量併發送批量交易而不是單個大交易。
而且還添加一些數據驗證檢查代碼,以確保每件事情都是正確的條目。
從理論上講,你可以用XA事務完成你所需要的事情......但是mysql的侷限性非常激烈,並且讓MySQL的XA事務成爲一個笑話:老實說:恢復&加入開始和結束都是暫停不工作(自2006年第一次發佈時)。所以要回答你的問題不!沒有機會與MySQL,忘記它!嘗試增加超時(在客戶端和服務器上),內存池,優化查詢等... mysql不會幫你在這裏。
什麼是您的連接字符串?你的連接器/服務器版本是什麼?什麼是錯誤信息?我認爲你需要解決問題。 – 2012-03-10 16:46:10
連接字符串:server = localhost; User Id = root; Persist Security Info = False; database = db;使用Compression = False; port = 3307;默認命令超時= 60。連接器6.4.4.0,Mysql 5.1。連接丟失(「連接必須有效且打開。」)。 – 2012-03-10 17:46:37
60秒後剛剛失去了?之後更多? – 2012-03-10 19:07:17