如何減少MySQL鎖衝突和死鎖

  • 儘量使用較低的隔離級別。
  • 精心設計死鎖,並儘量使用索引訪問數據,使加鎖更精確,從而減少鎖衝突的機會。
  • 選擇合理的事務大小,小事務發送鎖衝突的機率也小。
  • 顯式加鎖時,儘量一次性請求足夠級別的鎖。比如要修改數據,最好直接申請排他鎖,而不是先申請共享鎖,修改時再申請排他鎖,因爲在此期間有可能被別的事務搶佔了排他鎖,導致死鎖。
  • 不同的應用訪問同一組表時,應儘量約定以相同的順序訪問各表。對一個表而言,應儘量以固定的順序存取表中的行。這樣可以減少死鎖的機會。
  • 儘量用相等的條件訪問數據,這樣可以避免next-key鎖對併發插入的影響。
  • 不要申請超過實際需要的鎖級別;除非必要,查詢時不要顯示加鎖。
  • 對於一些特定的事務,可以使用表鎖來提高處理速度和減少死鎖的機率。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章