深度解析Mysql中MVCC的工作機制

MVCC,多版本并發控制

  • 定義:維護一個數據的多個版本,使讀寫操作沒有沖突,依賴于:隱藏字段,undo log日志,readView

  • MVCC會為每條版本記錄保存三個隱藏字段

    1. DB_TRX_ID: 記錄最近插入或修改該記錄的事務ID
    2. DB_ROLL_PTR:回滾指針,指向這條記錄的上個版本,配合undo log
    3. DB_ROW_ID隱藏主鍵,如果沒有指定主鍵,將會生成該隱藏主鍵

    流程(重點):在修改數據前,innodb引擎會在undo log日志拷貝一份原記錄,并將其DB_ROLL_PTR指向上一個版本,形成版本鏈。然后修改數據值,并把DB_TRX_ID改為當前執行的事務ID
    在這里插入圖片描述

  • readView

    1. 定義:確定事務在快照讀時能夠看到數據庫中的哪些數據版本

    2. 區分:

      當前讀:讀取的是記錄的最新版本,對讀取的記錄加鎖,保證讀取時其他并發事務不能修改當前記錄,解決幻讀

      快照讀:select查詢,不加鎖,讀取記錄數據的可見版本(通過事務ID遞增性判斷是否可見)

      1. Read Commited每次select都生成一個readView,讀取可見記錄中的最新版本,會造成不可重復讀的問題
      2. Repetable Read:事務首次 select時生成 readView,后續復用該readView**
  1. 定義:確定事務在快照讀時能夠看到數據庫中的哪些數據版本

  2. 區分:

    當前讀:讀取的是記錄的最新版本,對讀取的記錄加鎖,保證讀取時其他并發事務不能修改當前記錄,解決幻讀

    快照讀:select查詢,不加鎖,讀取記錄數據的可見版本(通過事務ID遞增性判斷是否可見)

    1. Read Commited每次select都生成一個readView,讀取可見記錄中的最新版本,會造成不可重復讀的問題
    2. Repetable Read:事務首次 select時生成 readView,后續復用該readView
  3. 流程:基于快照讀生成的readview,跟要查詢的行數據的mvcc版本DB_TRX_ID做比較,基于事務ID的遞增性判斷mvcc版本是否對當前readview可見,如果可見則返回當前mvcc版本的行數據,如果不可見,則通過mvcc的回滾指針回退到上一個版本。

  4. 判斷MVCC版本是否對當前readView可見:mvcc版本的DB_TRX_ID字段readView的字段比較,滿足以下任意條件:

    • DB_TRX_ID < min_trx_id(最小事務ID):該版本的事務比所有活躍事務(正在運行)更早創建且已提交,因此可見
    • DB_TRX_ID = creator_trx_id(創建該readview的事務ID):當前事務自己生成的版本(即使未提交),對自己總是可見
    • DB_TRX_ID < max_trx_id(預分配事務ID)&& DB_TRX_ID not in m_ids(活躍的事務ID列表中): 該版本的事務不在創建 read view 時的活躍事務列表中,說明已提交

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

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

相關文章

uniapp+vue3實現CK通信協議(基于jjc-tcpTools)

1. TCP 服務封裝 (tcpService.js) export class TcpService {constructor() {this.connections uni.requireNativePlugin(jjc-tcpTools)this.clients new Map() // 存儲客戶端連接this.servers new Map() // 存儲服務端實例}// 創建 TCP 服務端 (字符串模式)createStringSe…

學習設計模式《十二》——命令模式

一、基礎概念 命令模式的本質是【封裝請求】命令模式的關鍵是把請求封裝成為命令對象&#xff0c;然后就可以對這個命令對象進行一系列的處理&#xff08;如&#xff1a;參數化配置、可撤銷操作、宏命令、隊列請求、日志請求等&#xff09;。 命令模式的定義&#xff1a;將一個…

Webpack的基本使用 - babel

Mode配置 Mode配置選項可以告知Webpack使用相應模式的內置優化 默認值是production&#xff08;什么都不設置的情況下&#xff09; 可選值有&#xff1a;none | development | production; 這幾個選項有什么區別呢&#xff1f; 認識source-map 我們的代碼通常運行在瀏覽器…

「基于連續小波變換(CWT)和卷積神經網絡(CNN)的心律失常分類算法——ECG信號處理-第十五課」2025年6月6日

一、引言 心律失常是心血管疾病的重要表現形式&#xff0c;其準確分類對臨床診斷具有關鍵意義。傳統的心律失常分類方法主要依賴于人工特征提取和經典機器學習算法&#xff0c;但這些方法往往受限于特征選擇的主觀性和模型的泛化能力。 隨著深度學習技術的發展&#xff0c;基于…

C++.OpenGL (11/64)材質(Materials)

材質(Materials) 真實感材質系統 #mermaid-svg-NjBjrmlcpHupHCFQ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-NjBjrmlcpHupHCFQ .error-icon{fill:#552222;}#mermaid-svg-NjBjrmlcpHupHCFQ .error-text{fill:…

P1345 [USACO5.4] 奶牛的電信Telecowmunication

P1345 [USACO5.4] 奶牛的電信Telecowmunication 突然發現 USACO 好喜歡玩諧音梗。 題意就是給定一個無向圖&#xff0c;問你要刪多少點才能使 s , t s,t s,t 不連通。 注意是刪點而不是刪邊&#xff0c;所以不能直接使用最小割來求。所以考慮變換一下題目模型。 經典 tric…

EXCEL如何快速批量給兩字姓名中間加空格

EXCEL如何快速批量給姓名中間加空格 優點&#xff1a;不會導致排版混亂 缺點&#xff1a;無法輸出在原有單元格上&#xff0c;若需要保留原始數據&#xff0c;可將公式結果復制后“選擇性粘貼為值” 使用場景&#xff1a;在EXCEL中想要快速批量給兩字姓名中間加入空格使姓名對…

使用vtk8.2.0加載dicom圖像

1 上一篇文章我們已經編譯好了VTK的dll&#xff0c;下面我們就來加載他。 2 在Pro里面加載dll #------------------------------------------------- # # Project created by QtCreator 2024-02-04T14:39:07 # #-------------------------------------------------QT …

使用vsftpd搭建FTP服務器(TLS/SSL顯式加密)

安裝vsftpd服務 使用vsftpd RPM安裝包安裝即可&#xff0c;如果可以訪問YUM鏡像源&#xff0c;通過dnf或者yum工具更加方便。 yum -y install vsftpd 啟動vsftpd、查看服務狀態 systemctl enable vsftpd systemctl start vsftpd systemctl status vsftpd 備份配置文件并進…

鴻蒙OSUniApp集成WebGL:打造跨平臺3D視覺盛宴#三方框架 #Uniapp

UniApp集成WebGL&#xff1a;打造跨平臺3D視覺盛宴 在移動應用開發日新月異的今天&#xff0c;3D視覺效果已經成為提升用戶體驗的重要手段。本文將深入探討如何在UniApp中集成WebGL技術&#xff0c;實現炫酷的3D特效&#xff0c;并特別關注鴻蒙系統(HarmonyOS)的適配與優化。 …

前端文件下載常用方式詳解

在前端開發中&#xff0c;實現文件下載是常見的需求。根據不同的場景&#xff0c;我們可以選擇不同的方法來實現文件流的下載。本文介紹三種常用的文件下載方式&#xff1a; 使用 axios 發送 JSON 請求下載文件流使用 axios 發送 FormData 請求下載文件流使用原生 form 表單提…

MacOS解決局域網“沒有到達主機的路由 no route to host“

可能原因&#xff1a;MacOS 15新增了"本地網絡"訪問權限&#xff0c;在 APP 第一次嘗試訪問本地網絡的時候會請求權限&#xff0c;可能順手選擇了關閉。 解決辦法&#xff1a;給想要訪問本地網絡的 APP &#xff08;例如 terminal、Navicat、Ftp&#xff09;添加訪問…

中英文實習證明模板:一鍵生成標準化實習證明,助力實習生職場發展

中英文實習證明模板&#xff1a;一鍵生成標準化實習證明&#xff0c;助力實習生職場發展 【下載地址】中英文實習證明模板 這份中英文實習證明模板專為實習生設計&#xff0c;內容簡潔專業&#xff0c;適用于多種場景。模板采用中英文對照格式&#xff0c;方便國際交流與使用。…

RocketMQ運行架構和消息模型

運?架構 nameServer 命名服務 NameServer 是 RocketMQ 的 輕量級注冊中心&#xff0c;負責管理集群的路由信息&#xff08;Broker 地址、Topic 隊列分布等&#xff09;&#xff0c;其核心作用是解耦 Broker 與客戶端&#xff0c;實現動態服務發現。broker 核?服務 RocketMQ最…

C++學習-入門到精通【11】輸入/輸出流的深入剖析

C學習-入門到精通【11】輸入/輸出流的深入剖析 目錄 C學習-入門到精通【11】輸入/輸出流的深入剖析一、流1.傳統流和標準流2.iostream庫的頭文件3.輸入/輸出流的類的對象 二、輸出流1.char* 變量的輸出2.使用成員函數put進行字符輸出 三、輸入流1.get和getline成員函數2.istrea…

OpenCV 圖像像素的邏輯操作

一、知識點 1、圖像像素的邏輯操作&#xff0c;指的是位操作bitwise&#xff0c;與、或、非、異或等。 2、位操作簡介: 位1 位2 與and 或or 異或xor0 0 0 0 00 1 0 1 11 0 0 …

【AAOS】【源碼分析】用戶管理(二)-- 整體架構

整體介紹 Android多用戶功能作為 Android Automotive 的重要組成部分,為不同駕駛員和乘客提供了一個更加定制化、隱私保護的使用環境。Android 多用戶的存在,它可以讓多個用戶使用同一臺設備,同時保持彼此的數據、應用和設置分隔開來。 各用戶類型的權限 能力SystemAdminS…

Redis最佳實踐——電商應用的性能監控與告警體系設計詳解

Redis 在電商應用的性能監控與告警體系設計 一、原子級監控指標深度拆解 1. 內存維度監控 核心指標&#xff1a; # 實時內存組成分析&#xff08;單位字節&#xff09; used_memory: 物理內存總量 used_memory_dataset: 數據集占用量 used_memory_overhead: 管理開銷內存 us…

多模態大語言模型arxiv論文略讀(109)

Math-PUMA: Progressive Upward Multimodal Alignment to Enhance Mathematical Reasoning ?? 論文標題&#xff1a;Math-PUMA: Progressive Upward Multimodal Alignment to Enhance Mathematical Reasoning ?? 論文作者&#xff1a;Wenwen Zhuang, Xin Huang, Xiantao Z…

web3-以太坊智能合約基礎(理解智能合約Solidity)

以太坊智能合約基礎&#xff08;理解智能合約/Solidity&#xff09; 無需編程經驗&#xff0c;也可以幫助你了解Solidity獨特的部分&#xff1b;如果本身就有相應的編程經驗如java&#xff0c;python等那么學起來也會非常的輕松 一、Solidity和EVM字節碼 實際上以太坊鏈上儲存…