MVCC(多版本并發(fā)控制)multiversion concurrency control
讀讀并發(fā):可以并發(fā)
讀寫并發(fā)(innoDB):MVCC機制解決?
寫寫:互斥
快照讀:不加鎖的簡單select屬于快照讀,即不加鎖的非阻塞讀
快照讀的基礎是undolog版本鏈
聚簇索引中的隱藏列
trx_id:事務對數(shù)據(jù)改動時,事務將id賦值給trx_id
roll_pointer:舊值指針,roll_pointer生成undolog鏈
ReadView:快照讀,它會告訴我們應該看到的快照
由四個部分組成:
1.creator_trx_id: 創(chuàng)建ReadView的事務的id
2.m_ids:活躍事務(在執(zhí)行未提交)的id
3.min_trx_id: m_ids中的最小值(用于比較)
4.max_trx_id: 生成ReadView時,innoDB將要分配的下一個事務id
事務A(id:100)插入數(shù)據(jù)18;之后事務B(id:200)和C(id:300)并發(fā)執(zhí)行,此時
creator_trx_id: 200
m_ids: 200 300
min_trx_id:200
max_trx_id:301
事務B(id:200)第一次查詢時,會將隱藏字段trx_id(已提交事務A 的id)和min_trx_id進行比較,trx_id(100) 小于min_trx_id(200),則B可以查詢到A的數(shù)據(jù)18;
此時事務C(300)修改了數(shù)據(jù)為20,并提交;
當事務B第二次查詢時,但200<300<301,說明事務C是和事務B在同一時間段執(zhí)行的,B就不能讀到C的數(shù)據(jù),通過 undo log版本鏈,此時讀到的數(shù)據(jù)還是之前的18;
總之:ReadView保證可重復讀,通過邏輯判斷的非阻塞同步機制
mysql事務的本質:多線程訪問同一資源的彼此之間的排序規(guī)則
控制事務的底層機制就是鎖
鎖的底層是MVCC文章來源:http://www.zghlxwxcb.cn/news/detail-813297.html
MVCC使用的是MySQL的Undolog(回滾日志)文章來源地址http://www.zghlxwxcb.cn/news/detail-813297.html
到了這里,關于MySQL的MVCC的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!