Mysql學習之MVCC解決讀寫問題

多版本并發控制

什么是MVCC
MVCC (Multiversion Concurrency Control)多版本并發控制。顧名思義,MVCC是通過數據行的多個版本管理來實現數據庫的并發控制。這項技術使得在InnoDB的事務隔離級別下執行一致性讀操作有了保證。換言之,就是為了查詢一些正在被另一個事務更新的行,并且可以看到它們被更新之前的值,這樣在做查詢的時候就不用等待另一個事務釋放鎖。

快照讀與當前讀
在這里插入圖片描述
在這里插入圖片描述
再談隔離級別
在這里插入圖片描述

MVCC 可以不采用鎖機制,而是通過樂觀鎖的方式來解決不可重復讀和幻讀問題!它可以在大多數情況下替代行級鎖,降低系統的開銷。
在這里插入圖片描述
隱藏字段、Undo Log 版本鏈
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
MVCC實現原理之ReadView

MVCC的實現依賴于:隱藏字段、Undo log版本鏈、ReadView
什么是ReadView?
在MVCC機制中,多個事務對同一個行記錄進行更新會產生多個歷史快照,這些歷史快照保存在Undo Log里**。如果一個事務想要查詢這個行記錄,需要讀取哪個版本的行記錄呢?這時就需要用到ReadView了**,它幫助我們解決了行的可見性問題。
ReadView就是事務在使用MVCC機制進行快照讀操作時產生的讀視圖。當事務啟動時,會生成數據庫系統當前的一個快照,InnoDB為每個事務構造了一個數組,用來記錄并維護系統當前活躍事務的ID(“活躍”指的就是,啟動了但還沒提交)
設計思路
在這里插入圖片描述
ReadView要解決的主要問題就是需要判斷一下版本鏈中的哪個版本是當前事務可見的。
在這里插入圖片描述
在這里插入圖片描述
ReadView的規則
有了ReadView,在訪問某條記錄時,只需要按照下面的步驟判斷記錄的某個版本是否可見。

  • 如果被訪問版本的trx_id屬性值與ReadView中的creator_trx_id值相同,意味著當前事務在訪問它自己修改過的記錄,所以該版本可以被當前事務訪問。

  • 如果被訪問版本的trx_id值小于ReadView中的up_limit_id值,表明生成該版本的事務在當前事務生成ReadView前已提交,所以該版本可以被當前事務訪問。

  • 如果被訪問版本的trx_id值大于或等于ReadView中low_limit_id值,表明生成該版本的事務在當前事務生成的ReadView后才開啟,所以該版本不可以被當前事務訪問。

  • 如果被訪問版本的trx_id值在ReadView的up_limit_id和low_limit_id之間,那就需要判斷一下trx_id屬性值是不是在trx_ids列表中。

    如果在,說明創建ReadView時生成該版本的事務還是活躍的,該版本不可以被訪問。
    如果不在,說明創建ReadView時生成該版本的事務已經被提交,該版本可以被訪問。

MVCC整體操作流程

在這里插入圖片描述
事務的隔離級別為讀已提交時,一個事務中的每一次SELECT查詢都會重新獲取一次Read View。
在這里插入圖片描述
事務隔離級別為可重復讀時,就避免了不可重復讀。這是因為一個事務只在第一次SELECT的時候會獲取一次Read View,而后面的所有的SELECT都會復用這個Read view。
在這里插入圖片描述
舉例說明
在這里插入圖片描述
READ COMMITTED 隔離級別下
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
之后,把事務id為10的事務提交
在這里插入圖片描述
在這里插入圖片描述
這個時候再讀一次:
在這里插入圖片描述執行過程分析:
在這里插入圖片描述
在這里插入圖片描述
REPEATABLE READ隔離級別下
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
如何解決幻讀?

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
總結

在這里插入圖片描述
在這里插入圖片描述
B站鏈接

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/715772.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/715772.shtml
英文地址,請注明出處:http://en.pswp.cn/news/715772.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

django的模板渲染中的【高級定制】:按數據下標id來提取數據

需求: 1:在一個頁面中顯示一張數據表的數據 2:不能使用遍歷的方式 3:頁面中的數據允許通過admin后臺來進行修改 4:把一張數據表的某些內容渲染到[xxx.html]頁面 5:如公司的新商品頁面,已有固定的…

《夢幻西游》本人收集的34個單機版游戲,有詳細的視頻架設教程,值得收藏

夢幻西游這款游戲,很多人玩,喜歡研究的趕快下載吧。精心收集的34個版本。不容易啊。里面有詳細的視頻架設教程,可以外網呢。 《夢幻西游》本人收集的34個單機版游戲,有詳細的視頻架設教程,值得收藏 下載地址&#xff1…

FDM打印機學習

以下內容摘自網絡,僅供學習討論,侵刪。 持續更新。。。 FDM打印機是通過噴頭融化絲狀耗材(PLA,ABS等材料),然后逐層涂在熱床上,一層一層逐級抬高。 結構分類 Prusa i3型是一種龍門結構&#…

JavaWeb 下拉菜單怎么實現選擇不同的顏色?

在JavaWeb中實現下拉菜單選擇不同顏色的功能是一種常見的需求&#xff0c;可以通過HTML、CSS和JavaScript結合Java后端來實現。 第一步&#xff1a;編寫HTML頁面 首先&#xff0c;我們需要創建一個HTML頁面&#xff0c;其中包含一個下拉菜單和一個用于顯示顏色的區域。 <…

python 爬取文本內容并寫入json文件

背景: 項目需要從html 提取說明書目錄 實現: 由于html是包含所有內容,所以將其中目錄部分手動重新生成一個html 文件dir26.html python import requests from bs4 import BeautifulSoup import jsonfilename "dir26.html" # 替換為實際的文件路徑 with open(fil…

ES 備份索引

1、先創建索引 PUT file_info_sps_demo1 {"settings": {"index": {"number_of_shards": "1","blocks": {"read_only_allow_delete": "true"},"max_result_window": "500000",&quo…

階躍信號與沖擊信號

奇異信號&#xff1a;信號與系統分析中&#xff0c;經常遇到函數本身有不連續點&#xff08;跳變電&#xff09;或其導函數與積分有不連續點的情況&#xff0c;這類函數稱為奇異函數或奇異信號&#xff0c;也稱之為突變信號。以下為一些常見奇異函數。 奇異信號 單位斜變信號 …

C#雙向鏈表實現:Append()方法追加并顯示數據

目錄 一、涉及到的知識點 1.定義 2.雙向鏈表與單向鏈表的區別 二、實例 一、涉及到的知識點 1.定義 在雙向鏈表中&#xff0c;每個節點有兩個指針域&#xff0c;一個指向它的前一個節點&#xff08;即直接前驅&#xff09;&#xff0c;另一個指向它的后一個節點&#xff0…

Ubuntu18.04安裝RTX2060顯卡驅動+CUDA+cuDNN

Ubuntu18.04安裝RTX2060顯卡驅動CUDAcuDNN 1 安裝RTX2060顯卡驅動1.1 查看當前顯卡是否被識別1.2 安裝驅動依賴1.3 安裝桌面顯示管理器1.4 下載顯卡驅動1.5 禁用nouveau1.6 安裝驅動1.7 查看驅動安裝情況 2 安裝CUDA2.1 查看當前顯卡支持的CUDA版本2.2 下載CUDA Toolkit2.3 安裝…

車燈修復UV膠的優缺點有哪些?

車燈修復UV膠的優點如下&#xff1a; 優點&#xff1a; 快速固化&#xff1a;通過紫外光照射&#xff0c;UV膠可以在5-15秒內迅速固化&#xff0c;提高了修復效率。高度透明&#xff1a;固化后透光率高&#xff0c;幾乎與原始車燈材料無法區分&#xff0c;修復后車燈外觀更加…

對緩沖區的初步認識——制作進度條小程序

對緩沖區的初步認識--進度條小程序 前言預備知識回車和換行的區別輸出緩沖區/n 有清空輸出緩沖區的作用stdout是什么&#xff1f;驗證一切皆文件為什么是\n行刷新&#xff1f; 倒計時程序原理 代碼實現為什么這里要強制刷新&#xff1f;沒有會怎樣&#xff1f;為什么是輸出的是…

RabbitMQ安裝及使用

系列文章目錄 文章目錄 系列文章目錄前言一、下載二、安裝三、插件安裝四、配置五、權限六、集群模式 前言 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到網站&#xff0c;這篇文章男女通用&…

【MATLAB源碼-第154期】基于matlab的OFDM系統多徑信道下塊狀和梳妝兩種導頻插入方式誤碼率對比仿真。

操作環境&#xff1a; MATLAB 2022a 1、算法描述 OFDM&#xff08;Orthogonal Frequency Division Multiplexing&#xff0c;正交頻分復用&#xff09;是一種高效的無線信號傳輸技術&#xff0c;廣泛應用于現代通信系統&#xff0c;如Wi-Fi、LTE和5G。OFDM通過將寬帶信道劃分…

[機緣參悟-158] :西游記中的“佛” 、“道”之爭

目錄 前言 一、西游記中的佛教元素 1.1 佛教元素 1.2 西游記佛教思想 1.3 佛教的三界五行&#xff1a;物質世界 1.4 佛教中不在三界內&#xff0c;不在五行中&#xff1a;精神世界 二、西游記中的道教元素 2.1 主要元素 2.2 道家思想 三、“佛”如何兼容“道” 3.1 …

RK3568 Android12 適配抖音 各大APP

RK3568 Android12 適配抖音 各大APP SOC RK3568 system:Android 12 平臺要適配抖音和各大APP 平臺首先打開抖音發現攝像頭預覽尺寸不對只存在右上角,我將抖音APP裝在手機上預覽,發現是全屏 一開始瀏覽各大博客 給出的解決方法是修改framework 設置為全屏顯示: framewo…

2369. 檢查數組是否存在有效劃分

2369. 檢查數組是否存在有效劃分 題目鏈接&#xff1a;2369. 檢查數組是否存在有效劃分 代碼如下&#xff1a; //動態規劃 class Solution { public:bool validPartition(vector<int>& nums) {vector<int> dp(nums.size()1,false);//dp[i]表示前i個元素組成的…

Tomcat基礎及與Nginx實現動靜分離,搭建高效穩定的個人博客系統

目錄 引言 一、TOMCAT基礎功能 &#xff08;一&#xff09;自動解壓war包 &#xff08;二&#xff09;狀態頁 1.登錄狀態頁 2.遠程登錄 &#xff08;三&#xff09;服務管理界面 &#xff08;四&#xff09;Host虛擬主機 1.設置虛擬主機 2.建立站點目錄與文件 二、實…

使用QEMU搭建U-Boot+LinuxKernel+busybox+NFS嵌入式開發環境

目錄 0.課程大綱1.為什么要使用QEMU學習嵌入式QEMU簡介使用QEMU可以做哪些事情?當前嵌入式行業現狀如何適應這種變化使用QEMU學習嵌入式有哪些好處?驅動開發技能為什么要學習Linux 2.搭建嵌入式開發基本環境2.1.安裝u-boot-tools2.2.安裝交叉編譯工具什么是ABI和EABI 3.QEMU安…

三、基準時鐘、生成時鐘、虛擬時鐘的約束和意義

**前言&#xff1a;**前面從理論角度出發學習了時序分析的基本原理&#xff0c;本篇從設計的角度學習如何合理添加時鐘約束。 文章目錄 一、基準時鐘&#xff08;base clock&#xff09;和生成時鐘(generate clock)二、基準時鐘的約束1.完成綜合&#xff08;run implementatio…

linux的通信方案(SYSTEM V)

文章目錄 共享內存(Share Memory)信號隊列&#xff08;Message Queue&#xff09;信號量(semaphore) 進程間通信的核心理念&#xff1a;讓不同的進程看見同一塊資源 linux下的通信方案&#xff1a; SYSTEM V 共享內存(Share Memory) 特點&#xff1a;1.共享內存是進程見通信最…