Innodb 鎖實現事務隔離性

2021-10-18 06:41:18 字數 1264 閱讀 3200

mvcc隔離級別的實現

概述:用來維護事務的一致性和隔離性,在高併發場景下,如果加鎖過度,會極大的降低併發處理能力

分類:記錄鎖:鎖乙個索引記錄,表中沒有索引時,會自動為主鍵建立乙個聚簇索引

間隙鎖:鎖兩個索引記錄的間隙 或 第乙個索引記錄的前面 或 最後乙個索引記錄的後面的間隙

next-key:記錄鎖+間隙鎖,鎖索引記錄 以及 它前面的間隙

表鎖:

意向鎖協議如下:

表鎖和行鎖相容性:

auto-inc:特殊的表級鎖,插入到具有自增列的表的事務使用

概述:多版本併發控制,空間換時間,通過儲存資料每次修改的版本來實現讀不加鎖,提高併發性(讀寫併發)

實現:事務號+回滾日誌(版本鏈)+read view

read view:

查詢資料時通過回滾指標在資料版本鏈上找第乙個對該事務可見的資料

可見性判定:

mvcc簡化版 -- 高效能mysql

隔離級別與鎖

read uncommitted:無鎖

read committed:mvcc讀(每次讀最新版本快照),寫加鎖

repeatable read:

serializable(悲觀鎖):讀+共享鎖,寫+排他鎖,讀寫互斥

注:不可重複讀和幻讀的區別:不可重複讀重點在於update,幻讀在於insert

一致性鎖定讀:

怎麼保證資料方面的併發問題---從資料庫隔離級別去介紹權衡併發度--效能--儲存,兩階段(加鎖先於解鎖)

rr:mvcc,next-key

學習自

innodb事務隔離級別

事務隔離級別 sql標準定義了4類隔離級別,包括了一些具體規則,用來限定事務內外的哪些改變是可見的,哪些是不可見的。低階別的隔離級一般支援更高的併發處理,並擁有更低的系統開銷。read uncommitted 讀取未提交內容 在該隔離級別,所有事務都可以看到其他未提交事務的執行結果。本隔離級別很少用...

InnoDB事務隔離級別

會話1 會話2begin begin update table set age 10 where id 1 select age from table where id 1 commit commit rollback 會話2將age的值改變,且並未提交,此時會話1select查詢結果為10.如果會...

Mysql 事務隔離級別 InnoDB實現隔離機制

在read uncommitted級別中,事務所做的寫操作,即使沒有提交,對其他事務也是可見的,a事務可以讀取b事務未提交的資料,這就叫做未提交讀 髒讀。這個級別會導致很多問題,但從效能上來說,並不比其他級別好太多。大部分資料庫系統的預設隔離級別就是 read committed,它解決了髒讀的問題...