日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

通俗理解 mysql 的mvcc机制

發布時間:2024/1/1 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通俗理解 mysql 的mvcc机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

mvcc (多版本并發控制),開啟多個事務,并基于快照讀Read View實現;

Read View幾個屬性
?? ?trx_ids: 當前系統活躍事務版本號集合;
?? ?low_limit_id: 創建當前read view 時, 系統最大事務版本號+1;
?? ?up_limit_id: 創建當前read view 時,? 活躍事務最小版本號;
?? ?creator_trx_id: 創建當前read view的事務版本號;

read_view ?可見性規則:
?1.數據事務ID小于read view中的最小活躍事務ID,即trx_id<up_limit_id,

? ?說明數據是在當前事務生成read view之前就已經存在了,則顯示
? ?
?2.數據事務ID大于或等于read view 中的當前系統的最大事務ID,即trx_id>low_limit_id,

? ? 說明該數據是在當前read view 創建之后才產生的,則不顯示
?
?3.trx_id = creator_trx_id,是本事務產生的數據,則顯示
?4.被訪問版本的trx_id,在readview的min_trx_id和max_trx_id之間,則需要判斷trx_id值是否在m_ids列表中
? ? 如果在:說明創建readview時,該版本的事務還未提交,通過回滾指針查找歷史版本并返回;
? ? 如果不在:說明創建readview時,該版本的事務已經提交,所以直接返回該版本的數據

結合具體列子,
準備一張表,字段為id,age,當我們插入一條數據的時候,mysql會增加幾個隱藏字段,不會展示給我們用戶,其中一個字段為事務id,即trx_id
準備三個事務,分別更新數據,trx_id是隱藏的,這里列出來方便說明

idage?trx_idpoint
事務1111指針
事務2122指針
事務3133指針

? ? 注:這個不是表數據,事務提交或者回滾后,只有一條


首先,開啟事務1,插入一條數據id=1,age=1 這時隱藏列trx_id的值假如為1,以后的事務在此基礎上依次增長,提交事務,這時數據庫里就有一條數據了。

情景1
? ? ? 開啟事務2,執行查詢操作,
? ? ? 那么trx_id=2,mysql會記錄開啟是這個事務時的事務數據,包括目前存活的事務id列表trx_ids,值為2
? ? ? 最大事務id ,活躍的最大事務id+1,low_limit_id 為3;
? ? ? 最小事務id,up_limit_id 為2;
? ? ? 自己的事務版本,creator_trx_id為2

? ?開啟事務2執行查詢全表的操作,表中生成id為1的數據的事務id為1,即trx_id 1<2,顯示id=1的這條數據;

情景2
? ?開啟事務2,事務執行查詢之前,開啟了事務3,并更新為id=1,age=3,提交完成,此時事務2查詢,id=1的這條數據的trx_id為3,即trx_id 3>=3,不會顯示age=3的這條數據,通過回滾直接讀取歷史版本,顯示age為1的數據

情景3
? ?開啟事務2,事務3,事務3執行更新,未提交,
? ?事務2執行查詢操作,活動的事務trx_ids列表為(2,3),low_limit_id為4,up_limit_id為2
? ?age為3的記錄的trx_id處于 2 <= 3 <4,3在 trx_ids中,不顯示這個版本的數據;

情景4
? ?開啟事務2,事務3,事務3執行更新并提交,
? ?事務2執行查詢操作,活動的事務trx_ids列表為(2),low_limit_id為4,up_limit_id為2
? ?age為3的記錄的trx_id處于 2 <= 3 <4,3不在 trx_ids中,顯示這個版本的數據;

總結

以上是生活随笔為你收集整理的通俗理解 mysql 的mvcc机制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。