本篇內容主要講解“什么是MVCC機制”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“什么是MVCC機制”吧!
堅守“ 做人真誠 · 做事靠譜 · 口碑至上 · 高效敬業 ”的價值觀,專業網站建設服務10余年為成都成都發電機租賃小微創業公司專業提供企業網站制作營銷網站建設商城網站建設手機網站建設小程序網站建設網站改版,從內容策劃、視覺設計、底層架構、網頁布局、功能開發迭代于一體的高端網站建設服務。
我們上篇講解了undo log版本鏈是怎樣的《MySQL深入探索系列二 undo log》咱們在來看下那張圖
我們不是說mvcc嗎?怎么又出現個readview呢,這倆有什么關聯么?
別著急,聽我慢慢道來咱們還是簡單畫個圖,看下這readview是個什么東西和mvcc是什么關系
通過上圖可以基本上分清楚他們3個之間的關系了吧 readview中主要就這4個東西
min_txr_id: 當前readview中最小的事務id
max_txr_id:當前readview中最大的事務id
creator_txr_id:本次readview的事務id
[xx,xx,xx]:當前活躍的事務id數組
這幾個值究竟有什么用呢?比如說 當前的readview min_txr_id: 20 max_txr_id: 30 creator_txr_id:20 [20,30] 那么這個readview就是 事務20創建的,此時undo 版本鏈有 3個 分別對應txr_id 19 22 29 哪改事務就只能讀取txr_id為19的那個版本,其他2個版本是讀取不到的。
我們都知道有4中事務隔離級別
read uncommited: 讀為提交,即可以讀取到其他事務沒有提交數據 以下我簡稱 ru
read committed: 讀提交,即只有其他事務提交后才可以被當前事務讀取到 以下我簡稱 rc
repeatable read:可重復讀,單次事務可以多次讀取到相同的值 以下我簡稱 rr
serializable : 串行化,所以事務排隊依次執行,不存在并發情況,性能最差
這幾種隔離級別常見的問題是什么呢?
ru 情景一 :有 A B 兩個事務同時來操作同一條數據,A呢更新了這條數據值為a但是還沒提交,此時B讀取到了a,但是事務A某種原因回滾了,導致事務B再也讀取不到a了這就是 臟讀。
情景二 :有AB兩個事務同時來更新統一條數據c,事務A呢將c更新成了a 還沒提交,此時事務b過來更新把a更新長b 然后提交了。但是事A回滾了,導致事務B就蒙蔽了命名更新成b了現在變成c了,這就是 臟寫
rc 情景一 :有2個事務AB在同時運行,事務A 按照制定條件查詢了符合條件的行數 6條,select count(1) from xxx where age>18,此時事B插入了2條數據并且提交了事務,事務A再次查詢發現符合的條數變成8條了,好奇怪啊 2次查詢同樣的條件居然查到的條數不一樣,這就是 幻讀
請景二 :有2個事務AB在同時操作同一條數據c,事務查詢c值完成一些業務操作,此時事務A將數據c值更新成了a并且提交了,但是事務B再次查詢這條數據發現值不一樣了?同一個事務內多次讀取到的同一條數據值不同,這就是不可重復讀。
rr 這個雖然解決了可重復讀的問題,即一次事務中無論該條數據被其他事務更新了多少次,始終讀取到的都是同一個值,但是仍然有幻讀的問題
mysql中是如何通過mvcc 支持read committed呢,如果我們在mysql中設置的隔離級別是 rc 哪每次查詢都會生成一個新的readview,這是實現rc的關鍵,我們舉例看下
還是A(id=20)、B(id=30)兩個事務同時來操作數據c,事務A第一次查詢的時候生成readview 1 min_txr_id=20 ,max_txr_id=30,活躍事務[20,30],creator_txr_id=20 對應的undo log版本是txr_id=19 舊值是c。
此時事務B將c更新為b并且提交了,生成了undo log txr_id=30的版本,事務A再次發起查詢生成新的readview 2 min_txr_id=20,max_txr_id=31,活躍事務[20],creator_txr_id=20。
發現活躍的事務只有它自己了,然后順著undo log版本鏈查到到txr_id=30這條,雖然它的事務id比自己大,但是活躍事務中并沒有它,說明事務30已經提交了,所以此時可以看到該版本,所以事務A第二次讀取的c值為b。
我們來看下mysql怎么通過mvcc 實現rr可以同時解決不可重復讀,幻想讀的2中問題的。
如果我們將mysql設置rr隔離級別,每次事務只會生成一個readview,不管當前事務查詢數據庫多少次。
如果每次事務讀取的readview相同也就是每次能看到的undo log版本相同,所以每次看到的數據也就相同,即可解決可重復讀、幻想讀的問題。
到此,相信大家對“什么是MVCC機制”有了更深的了解,不妨來實際操作一番吧!這里是創新互聯網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
名稱欄目:什么是MVCC機制
轉載來源:http://vcdvsql.cn/article44/pejghe.html
成都網站建設公司_創新互聯,為您提供關鍵詞優化、搜索引擎優化、微信小程序、云服務器、App設計、網站內鏈
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯