mysql Mvcc解析

一娃惯、什么是mvcc

? ? mvcc(multiversion concurrency control),多版本并發(fā)控制肥败,主要是在事務的讀已提交和可重復讀情況下發(fā)揮作用趾浅。

????它主要通過在更新的行加三個字段:

? ? 1愕提、最近一次修改事務id(DBTRXID)

? ? 2、回滾指針皿哨,指向undolog的記錄(DBROLLPTR )

? ? 3浅侨、DBROWID,唯一標識

二证膨、mvcc原理

? ? 1如输、先從更新操作開始,如某一時刻央勒,事務10000對一條記錄進行修改不见,那么它將會把當前記錄保存在undolog中,然后再更新該條記錄的事務id崔步,和回滾指針脖祈,最后更新該列需要需改的數(shù)據(jù)。這里補充一個小知識點刷晋,每次都會寫入一條回滾日志盖高,那這個回滾日志何時回收呢?在mysql編程在不需要的時候才刪除眼虱。也就是說喻奥,系統(tǒng)會判斷,當沒有事務再需要用到這些回滾日志時捏悬,回滾日志會被刪除撞蚕。

? ? 2、在開啟事務時过牙,會將當前活躍的事務(已經(jīng)開啟了事務甥厦,但是還沒有提交)的事務 ID 放在一個數(shù)組里面,同時記錄數(shù)組里面最小的事務 ID 為「低水位」寇钉,記錄當前系統(tǒng)已經(jīng)創(chuàng)建的事務ID 的最大值加一為「高水位」刀疙。這三者組成了一個事務的一致性視圖(read-view)。當事務要查詢某個記錄的數(shù)據(jù)時扫倡,實際上就是拿該記錄的事務ID(包括歷史版本的事務ID)和這個一致性視圖進行比較谦秧,直到某個版本的數(shù)據(jù)是可見的為止

? ??讀取的記錄的事務ID小于低水位撵溃,說明這個版本的數(shù)據(jù)在開啟本事務前已經(jīng)提交疚鲤,是可見的,直接返回這個數(shù)據(jù)?缘挑。

????讀取的記錄的事務ID大于高水位集歇,說明這個版本的數(shù)據(jù)在開啟本事務后提交的,不可見语淘,從記錄中取出 DBROLLPTR 指向的記錄并讀取其事務 ID诲宇,開始下一輪的判斷?

????讀取的記錄的事務ID介于低水位和高水位中間际歼,此時判斷事務ID是否在一致性視圖的事務數(shù)組中: 如果不在,說明這個版本的數(shù)據(jù)在開啟本事務前已經(jīng)提交焕窝,是可見的,直接返回這個數(shù)據(jù) 如果在维贺,說明這個版本的數(shù)據(jù)是由開啟事務后的其他活躍事務提交的它掂,對本事務是不可見的,因此需要從記錄中取出 DBROLLPTR 指向的記錄并讀取其事務 ID溯泣,開始下一輪的判斷??

????這里個人簡單的總結一下虐秋,當時看mysql編程實戰(zhàn)的時候,總有些不懂垃沦,這個視圖到底是個什么東西客给,看了上述的文章,才明白肢簿。再讀未提交的情況下靶剑,不采用mvcc機制。這也就是讀提交操作當?shù)刈隽耸裁床僮魇沟每梢宰x已經(jīng)提交池充。就是通過上面所說的視圖桩引。這里,也可以發(fā)現(xiàn)讀已提交和可重復讀的區(qū)別收夸,讀提交的視圖是在每次查詢的時候生成的坑匠,因此一個事務,或許有多個“版本”的視圖卧惜,因此厘灼,當每次查詢的時候讀已提交可以保證這個事務是“最新”的。而可重復讀咽瓷,視圖的創(chuàng)建在第一個select设凹,可以保證后續(xù)的事務提交對本事務沒影響。

? ?但這里有一個問題需要注意茅姜,update围来、insert、delete都會有一個隱式的查詢操作匈睁,但它們都是當前讀(快照讀不加鎖监透,對于非唯一索引或普通字段,很容易引起沖突)航唆,讀取的都是最近的數(shù)據(jù)胀蛮,但問題是一旦其他事務刪除了記錄(添加),這可能會引起幻讀糯钙。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末粪狼,一起剝皮案震驚了整個濱河市退腥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌再榄,老刑警劉巖狡刘,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異困鸥,居然都是意外死亡嗅蔬,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門疾就,熙熙樓的掌柜王于貴愁眉苦臉地迎上來澜术,“玉大人,你說我怎么就攤上這事猬腰∧穹希” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵姑荷,是天一觀的道長盒延。 經(jīng)常有香客問我,道長鼠冕,這世上最難降的妖魔是什么兰英? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮供鸠,結果婚禮上畦贸,老公的妹妹穿的比我還像新娘。我一直安慰自己楞捂,他們只是感情好薄坏,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著寨闹,像睡著了一般胶坠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上繁堡,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天沈善,我揣著相機與錄音,去河邊找鬼椭蹄。 笑死闻牡,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的绳矩。 我是一名探鬼主播罩润,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼翼馆!你這毒婦竟也來了割以?” 一聲冷哼從身側響起金度,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎严沥,沒想到半個月后猜极,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡消玄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年跟伏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片莱找。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡酬姆,死狀恐怖嗜桌,靈堂內(nèi)的尸體忽然破棺而出奥溺,到底是詐尸還是另有隱情,我是刑警寧澤骨宠,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布浮定,位于F島的核電站,受9級特大地震影響层亿,放射性物質發(fā)生泄漏桦卒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一匿又、第九天 我趴在偏房一處隱蔽的房頂上張望方灾。 院中可真熱鬧,春花似錦碌更、人聲如沸裕偿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嘿棘。三九已至,卻和暖如春旭绒,著一層夾襖步出監(jiān)牢的瞬間鸟妙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工挥吵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留重父,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓忽匈,卻偏偏與公主長得像坪郭,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子脉幢,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容