MySQL更新死結問題

來源:互聯網
上載者:User

標籤:

作為一個社交類的 App ,我們有很多操作都會同時發生,為了確保資料的一致性,會採用資料庫的事物。

比如現在我們有一個點贊操作,點贊成功後,需要更改文章的熱度。以下是 SQL 陳述式:

INSERT INTO user_praise(uid,plan_id,stage_id) VALUES(123456,14456,10023);

UPDATE plan_hot SET hot = hot + 1 WHERE plan_id = 14456;

在這裡我們需要用到事物來確保它的原子性,也就是要麼這兩條語句全部執行成功,要麼就全部復原。

問題出現

在本地這麼測試後,發現並沒有出現什麼問題,但是部署上線後,列印出了錯誤記錄檔,如下

### Error updating database.  ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction### The error occurred while setting parametersSQL: UPDATE plan_hot SET hot = hot + 1 WHERE plan_id = ?;

錯誤中提示下面的更新語句出現了死結

UPDATE plan_hot SET hot = hot + 1 WHERE plan_id = ?;

該問題是第一次遇到,大概也知道是哪裡出現了死結,就是更新 hot = hot + 1 的時候,hot 可能會被一個鎖鎖住,而下一個操作就需要等待釋放鎖,然後才能擷取到 hot 的值,進行 hot = hot + 1。如果操作過快的話,可能就會造成死結。

但是還是不懂為什麼會這樣,根本原因是什麼,於是查資料,發現有一個小夥伴解釋得蠻清晰的,下面是他的博文。

分析解決

問題分析及解決方案參考

MySQL更新死結問題

謝謝他的分享,也希望更多的朋友能分享經驗。

http://www.tuicool.com/articles/nQniiaa

 

MySQL更新死結問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.