MySQL For Update導致全表排他鎖

壹頁書發表於2014-02-14
MySQL實驗環境:
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
user=root
skip-grant-tables
autocommit=0
innodb_log_file_size=50331648

其中test表欄位a是主鍵,欄位b上建立普通索引。事務隔離級別為可重複讀。

開啟一個終端,輸入如下語句

開啟另一個終端,輸入如下語句,發現被阻塞


如果開啟鎖監控功能,可以看到如下狀態:
鎖定了13行記錄,包括6行主鍵索引、6行二級索引和一個間隙鎖。


按照MySQL可重複讀使用間隙鎖的演算法,本來不應該導致一個全表的排它鎖定。
但是這種現象,不能用間隙鎖解釋。具體原因未知。

開啟鎖監控的方法:
建立一個表
create table innodb_lock_monitor(a int) engine=innodb;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1081634/,如需轉載,請註明出處,否則將追究法律責任。

相關文章