中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL如何實現RC事務隔離

發布時間:2022-03-31 09:00:43 來源:億速云 閱讀:205 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關MySQL如何實現RC事務隔離的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

ReadView機制基于undo log版本鏈條實現的一套讀視圖機制,事務生成一個ReadView:

  • 若為事務自己更新的數據,自己可以讀到

  • 或在你生成ReadView之前提交的事務所修改的值,也可讀到

  • 但若你生成ReadView時,就已經活躍的事務,但如果它在你生成ReadView之后修改的數據并提交了,此時你讀不到

  • 或你生成ReadView以后再開啟的事務修改了數據,還提交了,也讀不到

所以上面那套機制就是ReadView的一個原理如何基于ReadView實現RC?核心設計:當一個事務設置RC,他是每次發起查詢,都重新生成一個ReadView!

數據庫里有一行數據,是事務id=50的一個事務,很久以前就插入的,當前活躍事務:

  • 事務A(id=60)

  • 事務B(id=70)

現在事務B發起update,更新這條數據為b,所以此時數據的trx_id會變為事務B的id=70,同時生成一條undo log:

MySQL如何實現RC事務隔離

這時,事務A要發起一次查詢操作,就會生成一個ReadView

MySQL如何實現RC事務隔離

這時事務A發起查詢,發現當前這條數據的trx_id=70。即屬于ReadView的事務id范圍之間,說明是他生成ReadView之前就有這個活躍的事務,是這個事務修改了這條數據的值,但此時事務B還沒提交,所以ReadView的m_ids活躍事務列表里,有[60, 70]兩個id,此時根據ReadView機制,事務A無法查到事務B修改的值b。

接著就順著undo log版本鏈條往下查找,就會找到一個原始值,發現其trx_id是50,小于當前ReadView里的min_trx_id,說明是他生成ReadView之前,就有一個事務插入了這個值并且早就提交了,因此可以查到這個原始值。

接著,假設事務B提交,提交了就說明事務B不會活躍于數據庫里了。事務A下次再查詢,就可以讀到事務B修改過的值了。那到底是怎么讓事務A能夠讀到提交的事務B修改過的值呢?

讓事務A下次發起查詢,再生成一個ReadView,數據庫內活躍的事務只有事務A,因此:

  • min_trx_id是60

  • mac_trx_id是71

  • m_ids=60,事務B的id=70不會出現在m_ids活躍事務列表

此時事務A再次基于這個ReadView去查詢,會發現這條數據的trx_id=70,雖然在ReadView的min_trx_id和max_trx_id范圍之間,但是此時并不在m_ids列表內,說明事務B在生成本次ReadView之前就已提交。說明這次你查詢就可以查到事務B修改過的這個值了, 此時事務A就會查到值B。

感謝各位的閱讀!關于“MySQL如何實現RC事務隔離”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平顺县| 富蕴县| 磴口县| 遂川县| 宁安市| 昂仁县| 锡林郭勒盟| 湘潭县| 邛崃市| 宽城| 鞍山市| 囊谦县| 霍州市| 东山县| 重庆市| 阿拉善盟| 河南省| 康平县| 西贡区| 盈江县| 恩平市| 嘉兴市| 西平县| 宣化县| 西华县| 运城市| 罗定市| 曲麻莱县| 鄂托克前旗| 道真| 岱山县| 历史| 临安市| 崇阳县| 双柏县| 河北区| 达拉特旗| 黄冈市| 仪征市| 沁阳市| 洛宁县|