MySQL高级理论-MVCC提交查询相关(版本链)
首先要介紹幾個概念:
1. ? ?MVCC(Multi-Version Concurren):多版本并發(fā)控制,是MySQL的事務型存儲引擎如InnoDB。
2. ? ?trx_id與roll_pointer:MySQL會給每個表加2個字段,trx_id是事務字段id,roll_pointer為回滾字段。
3. ? ?事務會有一個ID,只有更新(刪除和插入是特性的更新)會生成事務ID。
4. ? ?在事務中進行更新,會把原記錄放到undo回滾日志里面,然后再插入一條新記錄,這個新記錄的roll_pointer指向剛剛放到undo回滾日志里面的那個記錄。
5. ? ?在事務中使用select不會生成事務ID。
6. ? ?但執(zhí)行查詢sql會生成一致性視圖read-view,它由查詢的那一刻所有未提交事務ID數(shù)組和已經創(chuàng)建的最大事務ID組成。查詢的數(shù)據(jù)結構需要和read-view做對比從而得到數(shù)據(jù)。
7. ? ?刪除操作是特殊的update,在版本鏈最新的地方復制一份,然后將刪除的事務id放到trx_id中,同時在該幾年的頭信息(record header)里的(deleted flag)標記為true,表名記錄已經被刪除,不返回數(shù)據(jù)。
8. ? ?MVCC快照機制不同的session,查詢同一條sql語句,如果存在不一樣的結果集,并不是在不同的session復制一份。
9. ? ?MySQL中快照也叫版本鏈,也叫記錄版本鏈,也叫undo回滾日志。 只有1個。
10. ?read-view指的是未提交事物數(shù)組到最大的事物ID,可重復讀會沿用前面的read-view。
11. ? 事務又分為重復讀和提交后讀,重復讀在東一個會話下查值是一樣的。
12. ? 重復讀如果第一次讀到100,不管中間其他會話怎么操作,不管有沒有提交,在這個會話下都只會讀到100.除非undo數(shù)據(jù)被清了。
?
了解上面的各個概念,其實就差不多了。
下面來搞個時序圖分析下:
再來一個分析圖:
總結
以上是生活随笔為你收集整理的MySQL高级理论-MVCC提交查询相关(版本链)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python笔记-Flask的搭建及基本
- 下一篇: Java笔记-JSP初步研究