innodb_locks_unsafe_for_binlog和間隙鎖機制
innodb默認使用了next-gap算法,這種算法結合了index-row鎖和gap鎖。正因為這樣的鎖算法,innodb在可重復讀這樣的默認隔離級別上,可以避免幻象的產生。innodb_locks_unsafe_for_binlog最主要的作用就是控制innodb是否對gap加鎖。
注意該參數如果是enable的,則是unsafe的,此時gap不會加鎖;反之,如果disable掉該參數,則gap會加鎖。當然對于一些和數據完整性相關的定義,如外鍵和唯一索引(含主鍵)需要對gap進行加鎖,那么innodb_locks_unsafe_for_binlog的設置并不會影響gap是否加鎖。
在5.1.15的時候,innodb引入了一個概念叫做“semi-consistent”,這樣會在innodb_locks_unsafe_for_binlog的狀態為ennable時在一定程度上提高update并發性。
這個參數影響innodb如何使用間隙鎖進行索引掃描和搜索,這個參數在未來的版本將被移除。
一般來說,innodb使用一種名為下一個鍵鎖定的算法,這個算法將索引行級鎖和間隙鎖相結合。innodb在執行行級鎖定時,會通過在遇到的索引記錄上加共享鎖或者獨占鎖這種方式進行搜索和掃描索引,因此,行級鎖實際上就是索引記錄鎖。此外,索引記錄上的下一鍵鎖也會影響索引記錄之間的間隙。也就是說,下一鍵鎖是一個索引記錄鎖加上在索引記錄之前的間隙上的間隙鎖。
MySQL
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。