Mysql innodb 面試要點記錄(二)鎖

2021-08-25 08:34:26 字數 1406 閱讀 9545

專案

isixsx

is相容

相容相容

不相容ix

相容相容

不相容不相容s相容

不相容相容

不相容x

不相容不相容

不相容不相容

是指 innodb 通過多版本控制的方式來讀取當前執行時間資料庫中的資料。如果,讀取的時候行正好在執行 delete 或 update 的排他操作,那讀取操作不會等待,會直接去讀取乙個快照版本的行資料。

一行資料可能不止乙個快照,實際上是通過 undo log來完成的。在事務進行修改操作的時候,innodb 將原有行的資料放入 undo log中,多個事務之間的 undo log 是序列鍊錶結構,如果發生錯誤則回滾到undo log 對應事務編號的記錄中

則是通過在事務中顯式的用 for update 和 lock in share mode 加鎖。當事務提交後鎖才會釋放。

當索引含有唯一屬性時,next-key lock會自動降級為record lock 用來減少鎖定的範圍,加大併發的處理速度。但是此種情況只存在於查詢【所有的唯一索引列】。如果,唯一索引由多個列組成,而查詢是查詢多個唯一索引列中的其中乙個,那麼這種查詢由於聯合索引的特性,查詢是乙個範圍查詢,而不是點查詢,所以不會降級處理。

當某個表有2個索引,乙個聚集唯一索引,乙個輔助索引。有(1,1)(2,3),(3,5),(4,7)這4個資料行。執行select * from t where b=5 for update。此時聚集唯一索引因為鎖降級的優化,會對a=3加上record lock,但是為了避免幻讀,輔助索引會有2種鎖,第一種是b=5的record lock,還有(3,5)(5,7) 2個範圍的grap lock。由於索引 b+tree 的屬性,聯合索引 a列又在b列之前,所以索引的節點值是

[舉例,索引不一定真的是這種結構]    

(3,5)

/ \

[(1,1)(2,3)] [(3,5)(4,7)]

如果沒有鎖定b 列的(5,7)範圍我再insert (4,5) 是可以插入進去的,因為a=3和 b=5都被 record lock 鎖定了,但是按聯合索引的特性是按前序列進行排序插入的,此時並不會觸發到b=5的 record lock。這樣就會導致幻讀,連續執行select * from t where b=5 for update這個語句上乙個事務的結果與下一次執行的這個語句得到的結果不會一樣。

mysql innodb 的預設事務級別是 repeatable read

略過,可以在其他層面理解。目前還沒有深入了解的打算

由於 innodb 的鎖根據頁粒度進行加鎖,並採取點陣圖的方式,鎖資源開銷較小,不存在鎖公升級的操作。

mysql innodb 面試要點記錄(三)事務

mysql innodb 面試要點記錄(一)緩衝和索引

Android面試要點(1)

1.簡單描述android中有哪幾種布局?你在專案中最經常使用哪幾種?2.請用xml布局的方式簡單寫一下下面的ui。省略,可根據自身的專案要求提供。3.簡單描述android中常用的幾種資料儲存方式。你在最近的專案中用到哪幾種?4.view,su ceview,glsu ceview有什麼區別?你認...

谷歌技術面試要點(Google面試)

技術面試的主題 1.簡要自我介紹 2.技術評估 沒有腦筋急轉彎問題 因為這不能反映你的程式設計能力 3.你對面試官的問題 如何準備技術面試 1.練習在白板上或者白紙上寫 2.我們需要的是實際的 高質量 高效率 高簡潔 無打字錯誤 3.語言選擇不是問題 面試官會讓你自己選你最強的語言程式設計 技術面試...

java面試通關要點彙總

spring bean 的生命週期 spring ioc 如何實現 說說 spring aop spring aop 實現原理 動態 cglib 與 jdk spring 事務實現方式 spring 事務底層原理 如何自定義註解實現功能 spring mvc 執行流程 spring mvc 啟動流程...