Mysql

表級鎖定的好處

  • July 18, 2019

MyISAM 儲存引擎使用的表級鎖定有什麼好處?行級鎖定有很多好處,例如不鎖定表的並發更新和讀取。

編輯 它廣泛認為表級鎖定可以防止死鎖。但是以並發為代價來預防死鎖如何值得呢?

MyISAM 沒有死鎖,但死鎖在某種程度上是對錶級鎖定的改進。

當您嘗試從鎖定的表中插入/更新/刪除時,您需要等待它可用或直到您獲得超時(預設為 28800 秒)。使用行級鎖定引擎上的死鎖,如果它不是空閒的,並且如果伺服器檢測到一種“無限循環” - 其中 2 個連接不會放棄一行 - 那麼它會快速拒絕兩個連接並且給僵局。

如果您正在嘗試解決死鎖,我建議您查看以下內容:

  • 死鎖是否發生在事務中的錯誤程式碼上?真的有必要為你“保持”一行來完成你的計算並更新它嗎?
  • 您的語句中是否有條件索引?否則 InnoDB 可能確實將整個表標記為等待更新。
  • 難道是伺服器上的硬碟沒有足夠快地送出 InnoDB 更改?伺服器上的檢查點操作是否會導致 InnoDB 出現問題/停止?
  • 是因為自動增量鎖定嗎?如果是這樣,也許你應該看看更自由的自動遞增 - 設置http://dev.mysql.com/doc/refman/5.1/en/innodb-auto-increment-handling.html(也看看行級鎖定解決此類更改引起的一些問題)

引用自:https://dba.stackexchange.com/questions/5780