MVCC實現原理

MVCC的基本概念

MVCC,一個數據的多個版本,使得讀寫操作沒有沖突。

在多個事務并發的情況下,確定到底要訪問哪個版本。

MVCC實現原理

MVCC實現依賴于隱式字段,undo log日志,readView

隱式字段

在mysql用戶自定義的字段后面,隱藏了MySQL提供好的3個隱藏字段

  • DB_TRX_ID:最近修改事務ID
  • DB_ROLL_PTR:指向回滾段中的undo log記錄,指向上一個版本
  • DB_ROW_ID:隱藏主鍵(當表無主鍵時自動生成)

undo log日志

回滾日志,在insert、update、delete的時候產生的便于數據回滾的日志。
當insert的時候,產生的undolog日志只在回滾時需要,在事務提交后,可被立即刪除。
而update、delete的時候,產生的undolog日志不僅在回滾時需要,mvcc版本訪問也需要,不會立即被刪除。

undo log版本鏈

undo log日志 記錄 數據修改前的值,形成版本鏈(相當于一個修改記錄)

ReadView機制 事務執行時會生成ReadView

ReadView(讀視圖)是 快照讀 SQL執行時MVCC提取數據的依據,記錄并維護系統當前活躍的事務(未提交的)id。

  • 當前讀:讀取的是最新版本,會加鎖,讀取時不會被修改。
  • 快照讀:不加鎖,讀取的是記錄數據的可見版本,可能是歷史數據。

ReadView包含4個核心字段

  • m_ids:當前活躍事務ID集合,還未提交的 事務的集合
  • min_trx_id:最小活躍事務ID
  • max_trx_id:預分配的下個事務ID,當前最大事務id+1(事務id是自增的)
  • creator_trx_id:創建該ReadView的事務ID

版本鏈 數據訪問規則

DB_TRX_ID:最近修改的事務id

  1. 如果DB_TRX_ID小于min_trx_id,說明該版本在ReadView創建前已提交,可訪問

  2. 如果DB_TRX_ID大于等于max_trx_id,說明該版本在ReadView創建后生成,不可訪問

  3. 如果DB_TRX_ID等于creator_trx_id,說明該版本由當前事務修改,可訪問

  4. 如果DB_TRX_IDm_ids列表中,說明該版本由未提交事務創建,不可訪問

不同隔離級別,生成的ReadView的時機不一樣

  • READ COMMITTED(RC):每次查詢都生成新的ReadView,能看到其他事務已提交的修改。(每次查詢時我都來判斷:最新提交的事務是誰,我就讀誰)
  • REPEATABLE READ(RR):僅在第一次查詢時生成ReadView并復用,保證事務期間看到的數據版本一致。(第一查詢,中間改動了,我還是復用第一次的查詢,不能識別到中間改動了)

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

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

相關文章

湖北理元理律師事務所債務優化方案解析:如何科學規劃還款保障生活質量

在當前經濟環境下,債務問題已成為困擾許多家庭的重要難題。據相關統計數據顯示,我國個人負債率呈現逐年上升趨勢,如何合理規劃還款、保障基本生活質量成為亟待解決的社會問題。湖北理元理律師事務所基于多年實務經驗,研發出一套科…

ffmpeg 轉換視頻格式

使用FFmpeg將視頻轉換為MP4格式的常用命令: ffmpeg -i input.mov -c:v libx264 -crf 23 -c:a aac output.mp4 -i input.avi:指定輸入文件 -c:v libx264:使用H.264視頻編碼器 -crf 23:控制視頻質量(范圍18-28&#…

LLM Tuning

Lora-Tuning 什么是Lora微調? LoRA(Low-Rank Adaptation) 是一種參數高效微調方法(PEFT, Parameter-Efficient Fine-Tuning),它通過引入低秩矩陣到預訓練模型的權重變換中,實現無需大規模修改…

實現tdx-hs300-mcp

文章目錄 項目簡介功能說明使用方法配置說明項目簡介 tdx-hs300-mcp是一個Model Context Protocol (MCP)的服務 功能說明 下載數據自動保存為CSV格式文件使用方法 確保已安裝Python 3.7+和依賴庫: pip install pytdx fastapi uvicorn啟動MCP服務: mcp run MCP.py使用MCP工具…

《100天精通Python——基礎篇 2025 第20天:Thread類與線程同步機制詳解》

目錄 一、概念簡單回顧二、Python的線程開發2.1 Thread類2.1.1 線程啟動2.1.2 線程退出2.1.3 線程的傳參2.1.4 threading的屬性和方法2.1.5 Thread實例的屬性和方法2.1.6 start和run方法 2.2 多線程2.3 線程安全2.4 daemon線程2.5 threading.local類2.6 __slots__拓展 三、線程…

【web應用】前后端分離開源項目聯調運行的過程步驟ruoyi

文章目錄 ?前言?一、項目運行環境準備?二、數據庫創建🌟1、新建數據庫🌟2、導入數據腳本 ?三、運行后端項目🌟1、打開后端項目🌟2、后端項目配置項修改 ?四、運行前端項目VUE3🌟1、在IDEA另一個窗口中打開前端項目…

【深度剖析】三一重工的數字化轉型(下篇1)

在數字經濟持續發展的背景下,企業數字化轉型方案成為實現轉型的關鍵。不同行業內的企業因轉型動機和路徑的差異,其轉型成效也各異。三一重工作為機械制造行業的領軍企業,較早地實施了數字化轉型,并積累了豐富的經驗。本研究選取三一重工作為案例,通過梳理相關文獻,對其數…

Nacos適配GaussDB超詳細部署流程

1部署openGauss 官方文檔下載 https://support.huaweicloud.com/download_gaussdb/index.html 社區地址 安裝包下載 本文主要是以部署輕量級為主要教程 1.1系統環境準備 操作系統選擇 系統AARCH64X86-64openEuler√√CentOS7√Docker√√1.2軟硬件安裝環境 版本輕量版(單…

國際前沿知識系列五:時間序列建模方法在頭部撞擊運動學測量數據降噪中的應用

目錄 國際前沿知識系列五:時間序列建模方法在頭部撞擊運動學測量數據降噪中的應用 一、引言 二、時間序列建模方法 (一)ARIMA 模型 (二)指數平滑法 (三)小波變換 三、實際案例分析 &…

線性代數中的向量與矩陣:AI大模型的數學基石

🧑 博主簡介:CSDN博客專家、CSDN平臺優質創作者,高級開發工程師,數學專業,10年以上C/C, C#, Java等多種編程語言開發經驗,擁有高級工程師證書;擅長C/C、C#等開發語言,熟悉Java常用開…

第十七次CCF-CSP算法(含C++源碼)

第十七次CCF-CSP認證 小明種蘋果AC代碼 小明種蘋果&#xff08;續&#xff09;AC代碼 后面好難哈哈 小手冰涼 小明種蘋果 輸入輸出&#xff1a; 題目鏈接 AC代碼 #include<iostream> using namespace std; int n,m; int res,res3; int sum; int res21; int main(){cin …

curl常用指令

curl使用記錄 curl常用指令安裝請求get請求post請求錯誤排查 curl常用指令 安裝 sudo apt update sudo apt install curl -y請求 get請求 curl [URL]如果能正常請求&#xff0c;則會返回正常的頁面信息 post請求 發送 JSON 數據? curl -X POST [URL] -H "Content-…

C++ 輸入輸出流示例代碼剖析

一、開篇&#xff1a;代碼核心概述 本文圍繞一段融合輸入輸出流操作、自定義類型重載、文件讀寫的C代碼展開&#xff0c;深入探究其底層原理與實踐應用。代碼通過類型轉換、操作符重載等技術&#xff0c;實現自定義類型與標準輸入輸出流的交互&#xff0c;同時借助文件流完成數…

常見嵌入式軟件架構

常見的嵌入式軟件架構 一、ASW文件夾&#xff08;Application Software&#xff0c;應用軟件&#xff09;定義與作用常見子目錄結構特點 二、BSP文件夾&#xff08;Board Support Package&#xff0c;板級支持包&#xff09;定義與作用常見子目錄結構特點 三、OS文件夾&#xf…

【PostgreSQL】數據探查工具1.0研發可行性方案

?? 點擊關注不迷路 ?? 點擊關注不迷路 ?? 點擊關注不迷路 想搶先解鎖數據自由的寶子,速速戳我!評論區蹲一波 “蹲蹲”,揪人嘮嘮你的超實用需求! 【PostgreSQL】數據探查工具1.0研發可行性方案,數據調研之秒解析數據結構,告別熬夜寫 SQL【PostgreSQL】數據探查工具…

Lambda表達式與匿名內部類的對比詳解

Lambda表達式與匿名內部類的對比詳解 1. 語法簡潔性 Lambda表達式&#xff1a; 僅適用于函數式接口&#xff08;只有一個抽象方法的接口&#xff09;&#xff0c;語法簡潔。 示例&#xff1a; Runnable r () -> System.out.println("Hello Lambda");匿名內部類&…

Seata Server 1.6.1 高可用部署終極指南:Nacos配置中心+DB存儲+多實例實戰

文章目錄 高可用 - 關鍵因素存儲模式配置中心注冊中心高可用 - 步驟第 1 步:使用 db 作為存儲模式第 2 步:使用 Nacos 配置中心自定義 seata-server 配置添加 seata-server.properties 到 Nacos第 3 步:修改 application.yml使用 Nacos 作為配置中心使用 Nacos 作為注冊中心…

JS 中判斷 null、undefined 與 NaN 的權威方法及場景實踐

在 JavaScript 中&#xff0c;null、undefined 和 NaN 是三個特殊的「非正常值」&#xff0c;正確判斷它們是保證代碼健壯性的關鍵。本文結合 ECMA 規范與 MDN 權威文檔&#xff0c;系統梳理三者的判斷方法、原理及典型場景&#xff0c;幫助開發者規避常見誤區。 一、理解三個…

基于DenseNet的醫學影像輔助診斷系統開發教程

本文源碼地址: https://download.csdn.net/download/shangjg03/90873921 1. 簡介 本教程將使用DenseNet開發一個完整的醫學影像輔助診斷系統,專注于胸部X光片的肺炎檢測。我們將從環境搭建開始,逐步介紹數據處理、模型構建、訓練、評估以及最終的系統部署。 2. 環境準備<…

ubuntu ollama /Dify/Docker部署大模型

電腦需要顯卡&#xff1a; 執行下載并安裝&#xff1a; curl -fsSL https://ollama.com/install.sh | sh 安裝完后到Ollama Search 中查看ollama 可以部署的模型有哪些&#xff1a; 我選擇gemma3,所以執行&#xff1a; ollma pull gemma3:latest 這樣就把gemma3:latest 模…