最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL?RC事務(wù)隔離的實(shí)現(xiàn)原理

 更新時(shí)間:2022年03月30日 17:19:37   作者:?JavaEdge?  
這篇文章主要介紹了MySQL?RC事務(wù)隔離的實(shí)現(xiàn),Read?Committed,事務(wù)運(yùn)行期間,只要?jiǎng)e的事務(wù)修改數(shù)據(jù)并提交,即可讀到人家修改的數(shù)據(jù),所以會(huì)有不可重復(fù)讀、幻讀問(wèn)題,下文相關(guān)介紹需要的朋友可以參考下

摘要:Read Committed事務(wù)運(yùn)行期間,只要?jiǎng)e的事務(wù)修改數(shù)據(jù)并提交,即可讀到人家修改的數(shù)據(jù),所以會(huì)有不可重復(fù)讀、幻讀問(wèn)題。ReadView機(jī)制基于undo log版本鏈條實(shí)現(xiàn)的一套讀視圖機(jī)制,事務(wù)生成一個(gè)ReadView:若為事務(wù)自己更新的數(shù)據(jù),自己可以讀到或在你生成ReadView之前提交的事務(wù)所修改的值,也可讀到但若你生成ReadView時(shí),就已經(jīng)活躍的事務(wù),但如果它在你生成Read...

ReadView機(jī)制基于undo log版本鏈條實(shí)現(xiàn)的一套讀視圖機(jī)制,事務(wù)生成一個(gè)ReadView:

  • 若為事務(wù)自己更新的數(shù)據(jù),自己可以讀到
  • 或在你生成ReadView之前提交的事務(wù)所修改的值,也可讀到
  • 但若你生成ReadView時(shí),就已經(jīng)活躍的事務(wù),但如果它在你生成ReadView之后修改的數(shù)據(jù)并提交了,此時(shí)你讀不到
  • 或你生成ReadView以后再開(kāi)啟的事務(wù)修改了數(shù)據(jù),還提交了,也讀不到

所以上面那套機(jī)制就是ReadView的一個(gè)原理如何基于ReadView實(shí)現(xiàn)RC?核心設(shè)計(jì):當(dāng)一個(gè)事務(wù)設(shè)置RC,他是每次發(fā)起查詢(xún),都重新生成一個(gè)ReadView!

數(shù)據(jù)庫(kù)里有一行數(shù)據(jù),是事務(wù)id=50的一個(gè)事務(wù),很久以前就插入的,當(dāng)前活躍事務(wù):

  • 事務(wù)A(id=60)
  • 事務(wù)B(id=70)

現(xiàn)在事務(wù)B發(fā)起update,更新這條數(shù)據(jù)為b,所以此時(shí)數(shù)據(jù)的trx_id會(huì)變?yōu)槭聞?wù)B的id=70,同時(shí)生成一條undo log:

這時(shí),事務(wù)A要發(fā)起一次查詢(xún)操作,就會(huì)生成一個(gè)ReadView

這時(shí)事務(wù)A發(fā)起查詢(xún),發(fā)現(xiàn)當(dāng)前這條數(shù)據(jù)的trx_id=70。即屬于ReadView的事務(wù)id范圍之間,說(shuō)明是他生成ReadView之前就有這個(gè)活躍的事務(wù),是這個(gè)事務(wù)修改了這條數(shù)據(jù)的值,但此時(shí)事務(wù)B還沒(méi)提交,所以ReadView的m_ids活躍事務(wù)列表里,有[60, 70]兩個(gè)id,此時(shí)根據(jù)ReadView機(jī)制,事務(wù)A無(wú)法查到事務(wù)B修改的值b。

接著就順著undo log版本鏈條往下查找,就會(huì)找到一個(gè)原始值,發(fā)現(xiàn)其trx_id是50,小于當(dāng)前ReadView里的min_trx_id,說(shuō)明是他生成ReadView之前,就有一個(gè)事務(wù)插入了這個(gè)值并且早就提交了,因此可以查到這個(gè)原始值。

接著,假設(shè)事務(wù)B提交,提交了就說(shuō)明事務(wù)B不會(huì)活躍于數(shù)據(jù)庫(kù)里了。事務(wù)A下次再查詢(xún),就可以讀到事務(wù)B修改過(guò)的值了。那到底是怎么讓事務(wù)A能夠讀到提交的事務(wù)B修改過(guò)的值呢?

讓事務(wù)A下次發(fā)起查詢(xún),再生成一個(gè)ReadView,數(shù)據(jù)庫(kù)內(nèi)活躍的事務(wù)只有事務(wù)A,因此:

  • min_trx_id是60
  • mac_trx_id是71
  • m_ids=60,事務(wù)B的id=70不會(huì)出現(xiàn)在m_ids活躍事務(wù)列表

此時(shí)事務(wù)A再次基于這個(gè)ReadView去查詢(xún),會(huì)發(fā)現(xiàn)這條數(shù)據(jù)的trx_id=70,雖然在ReadViewmin_trx_idmax_trx_id范圍之間,但是此時(shí)并不在m_ids列表內(nèi),說(shuō)明事務(wù)B在生成本次ReadView之前就已提交。說(shuō)明這次你查詢(xún)就可以查到事務(wù)B修改過(guò)的這個(gè)值了, 此時(shí)事務(wù)A就會(huì)查到值B。

到此這篇關(guān)于MySQL RC事務(wù)隔離的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)MySQL RC事務(wù)隔離內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

大丰市| 海淀区| 三门县| 原阳县| 遵义县| 广河县| 商丘市| 虎林市| 铜川市| 丰城市| 海口市| 成武县| 怀集县| 五台县| 广宁县| 崇左市| 长海县| 郎溪县| 西吉县| 都安| 阳谷县| 柳州市| 乡宁县| 元谋县| 思茅市| 田阳县| 于都县| 汉阴县| 建阳市| 德安县| 常宁市| 安庆市| 台中县| 盖州市| 故城县| 乌拉特后旗| 镇康县| 合江县| 林口县| 永安市| 伊宁县|