2 mysql 中事務隔離級別的實現
3 next-key locks
多版本併發控制(multi-version concurrency control, mvcc)以樂觀鎖為理論基礎,和基於鎖的併發控制最大的區別和優點是:讀不加鎖,讀寫不衝突。
mvcc 將每乙個更新的資料標記乙個版本號,在更新時進行版本號的遞增,插入時新建乙個版本號,同時舊版本資料儲存在 undo 日誌中,該日誌通過回滾指標把乙個資料行(record)的所有快照連線起來。
1 快照讀
快照讀只是針對於目標資料的版本號小於等於當前事務的版本號,也就是說讀資料的時候可能讀到舊資料,但是這種快照讀不需要加鎖。也就是說,使用 mvcc 讀取的是快照中的資料,這樣可以減少加鎖所帶來的開銷。
select
*from
table..
.;
2 當前讀當前讀是讀取當前資料的最新版本,但是更新等操作會對資料加鎖,所以當前讀需要獲取記錄的行鎖,存在鎖爭的問題。以下第乙個語句需要加 s 鎖,其它都需要加 x 鎖。
select
*from
table
where ? lock
inshare
mode
;# 加 s 鎖
select
*from
table
where ? for
update
;insert
;update
;delete
;
對於讀操作,由於 mvcc 的引入,分為快照讀和當前讀:
rc 和 rr 都是基於 mvcc 實現的,但是讀取的快照資料是不相同的:
總是讀取最新的資料行,無需使用 mvcc。
next-key locks 是 mysql 的 innodb 儲存引擎的一種鎖實現;
mvcc 不能解決幻影讀問題,next-key locks 就是為了解決這個問題而存在的;
在可重複讀(repeatable read)隔離級別下,使用 mvcc + next-key locks 可以解決幻讀問題;
鎖定乙個記錄上的索引,而不是記錄本身;
如果表沒有設定索引,innodb 會自動在主鍵上建立隱藏的聚簇索引,因此 record locks 依然可以使用;
鎖定索引之間的間隙,但是不包含索引本身。例如當乙個事務執行以下語句,其它事務就不能在 c 中插入 15。
select c from t where c between
10and
20for
update
;
它是 record locks 和 gap locks 的結合,不僅鎖定乙個記錄上的索引,也鎖定索引之間的間隙,是乙個前開後閉區間。例如乙個索引包含以下值:10, 11, 13, and 20,那麼就需要鎖定以下區間:
(
-∞,10](
10,11]
(11,13
](13,
20](20
,+supremum)
問題一:對主鍵索引或唯一索引會使用間隙鎖嗎?
不一定。視情況而定:
delete
from tb where id =
9-- table: tb(name primary key,id unique key)
-- key 是唯一索引
根據 id=9 條件定位,此時給 id = 9 的索引加上記錄鎖,根據 name 值到主索引中檢索獲得記錄,再給該記錄加上記錄鎖。
問題二:間隙鎖是否用在非唯一索引的當前讀中?
是的。
delete
from tb1 where id =
9-- table: tb1(name primary key,id key)
-- key 是非唯一索引
可以看出,在 (6,9] 、(9,11] 加了間隙鎖。
問題三:間隙鎖是否用在不走索引的當前讀中?
是的。
delete
from tb2 where id =
9-- table: tb2(name primary key,id)
-- 沒有為 id 建立索引
此時對所有的間隙都上鎖(功能上相當於鎖表)。
總結:
主鍵索引 / 唯一索引:
非唯一索引:
不走索引:
MySQL事務隔離級別的實現原理
在mysql的眾多儲存引擎中,只有innodb支援事務,所有這裡說的事務隔離級別指的是innodb下的事務隔離級別。讀未提交 乙個事務可以讀取到另乙個事務未提交的修改。這會帶來髒讀 幻讀 不可重複讀問題。基本沒用 讀已提交 乙個事務只能讀取另乙個事務已經提交的修改。其避免了髒讀,但仍然存在不可重複讀...
MySQL事務隔離級別的實現原理
在mysql的眾多儲存引擎中,只有innodb支援事務,所有這裡說的事務隔離級別指的是innodb下的事務隔離級別。讀未提交 乙個事務可以讀取到另乙個事務未提交的修改。這會帶來髒讀 幻讀 不可重複讀問題。基本沒用 讀已提交 乙個事務只能讀取另乙個事務已經提交的修改。其避免了髒讀,但仍然存在不可重複讀...
mysql 事務隔離級別的實現原理
目錄 一 事務的四要素 acid 二 mysql的事務的隔離級別 三 多版本併發控制 multi version concurrency control 3.1 功能 3.2 原理 1.原子性 atomicity all done 或者 all not done 2.一致性 consistency ...