MySQLInnoDBMVCC實現(xiàn)原理
來源:懂視網(wǎng)
責(zé)編:小采
時間:2020-11-09 15:15:53
MySQLInnoDBMVCC實現(xiàn)原理
MySQLInnoDBMVCC實現(xiàn)原理:MVCC背景:MySQL事務(wù)默認(rèn)使用REPEATABLE READ(可重復(fù)讀)隔離級別。該隔離級別還是會產(chǎn)生幻讀問題。即當(dāng)某個事務(wù)讀取某個范圍的記錄時,另外一個事物在該范圍插入了新的記錄,那么之前的事務(wù)再次讀取該范圍的記錄時,會產(chǎn)生幻行。MySQL InnoDB就是
導(dǎo)讀MySQLInnoDBMVCC實現(xiàn)原理:MVCC背景:MySQL事務(wù)默認(rèn)使用REPEATABLE READ(可重復(fù)讀)隔離級別。該隔離級別還是會產(chǎn)生幻讀問題。即當(dāng)某個事務(wù)讀取某個范圍的記錄時,另外一個事物在該范圍插入了新的記錄,那么之前的事務(wù)再次讀取該范圍的記錄時,會產(chǎn)生幻行。MySQL InnoDB就是

MVCC背景:
MySQL事務(wù)默認(rèn)使用REPEATABLE READ(可重復(fù)讀)隔離級別。該隔離級別還是會產(chǎn)生幻讀問題。即當(dāng)某個事務(wù)讀取某個范圍的記錄時,另外一個事物在該范圍插入了新的記錄,那么之前的事務(wù)再次讀取該范圍的記錄時,會產(chǎn)生幻行。MySQL InnoDB就是通過多版本并發(fā)控制(MVCC)解決幻讀問題。
MVCC簡介:
MVCC將數(shù)據(jù)庫的行鎖與行的多個版本結(jié)合起來,只需要很小的開銷,就可以實現(xiàn)非鎖定讀,從而大大提高數(shù)據(jù)庫系統(tǒng)的并發(fā)性能.
MVCC實現(xiàn)原理:
MVCC保存某個時間點上的數(shù)據(jù)快照。一個事務(wù)內(nèi),看到的是同一個版本的快照,數(shù)據(jù)一致。不同事務(wù)在同一時間點看到的數(shù)據(jù)會不一致,因為他們得到的數(shù)據(jù)版本不一樣。InnoDB在每行記錄存在額外的隱藏字段,其中一列存儲行被更新的版本號,另外一列存儲行被刪除的版本號。每當(dāng)一個事務(wù)開始的時候,innodb都會給這個事務(wù)分配一個遞增的版本號,所以版本號也可以被認(rèn)為是事務(wù)號.對于每一個”查詢”語句,innodb都會把這個查詢語句的版本號同這個查詢語句遇到的行的版本號進行對比,然后結(jié)合不同的事務(wù)隔離等級,來決定是否返回該行。當(dāng)隔離級別是REPEATABLE
READ時,這種策略下,select、delete、 insert、 update語句如何操作:
1) SELECT 對于select語句,只有同時滿足了下面兩個條件的行,才能被返回:
?行的被修改版本號小于或者等于該事務(wù)號
?行的被刪除版本號要么沒有被定義,要么大于事務(wù)的版本號:行的刪除版本號如果沒有被定義,說明該行沒有被刪除過;如果刪除版本號大于當(dāng)前事務(wù)的事務(wù)號,說明該行是被該事務(wù)后面啟動的事務(wù)刪除的,由于是repeatable read隔離等級,后開始的事務(wù)對數(shù)據(jù)的影響不應(yīng)該被先開始的事務(wù)看見,所以該行應(yīng)該被返回.
2) INSERT 對新插入的行,行的更新版本被修改為該事務(wù)的事務(wù)號
3) DELETE 對于刪除,innodb直接把該行的被刪除版本號設(shè)置為當(dāng)前的事務(wù)號,相當(dāng)于標(biāo)記為刪除,而不是實際刪除
4) UPDATE 在更新行的時候,innodb會把原來的行復(fù)制一份到回滾段中,并把當(dāng)前的事務(wù)號作為該行的更新版本
InnoDB存儲引擎MVCC的實現(xiàn)策略:
在每一行數(shù)據(jù)中額外保存兩個隱藏字段:當(dāng)前行創(chuàng)建時的版本號和刪除時的版本號(可能為空)。每個事務(wù)又有自己的版本號,這樣事務(wù)內(nèi)執(zhí)行CRUD操作時,就通過版本號的比較來達到數(shù)據(jù)版本控制的目的。具體做法見下面的示意圖。
MVCC缺點:
為了實現(xiàn)多版本,InnoDB需要維護額外的隱藏字段,以及清理不需要的行版本,帶來額外開銷。
更多相關(guān)教程請訪問 MySQL視頻教程
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com
MySQLInnoDBMVCC實現(xiàn)原理
MySQLInnoDBMVCC實現(xiàn)原理:MVCC背景:MySQL事務(wù)默認(rèn)使用REPEATABLE READ(可重復(fù)讀)隔離級別。該隔離級別還是會產(chǎn)生幻讀問題。即當(dāng)某個事務(wù)讀取某個范圍的記錄時,另外一個事物在該范圍插入了新的記錄,那么之前的事務(wù)再次讀取該范圍的記錄時,會產(chǎn)生幻行。MySQL InnoDB就是