mysql-innoDB存儲引擎事務的原理

InnoDB 存儲引擎支持 ACID 事務,其事務機制是通過?Redo Log(重做日志)Undo Log(回滾日志)?和?事務日志系統?來實現的。下面詳細解析 InnoDB 事務的工作原理。

1.事務的基本特性(ACID)

特性描述
Atomicity(原子性)事務中的操作要么全部成功,要么全部失敗回滾
Consistency(一致性)事務執行前后數據庫的狀態保持一致
Isolation(隔離性)多個事務并發執行時互不干擾
Durability(持久性)事務提交后對數據的修改是永久性的

2.InnoDB 事務的核心組件

1.?Redo Log(重做日志)

  • 作用:確保事務的持久性(Durability)
  • 寫入時機:在事務提交前寫入
  • 記錄內容:物理日志,記錄頁修改(如某個頁中某偏移量位置的值被修改為多少)
  • 特點
    • 順序寫入,速度快
    • 用于崩潰恢復(crash recovery),防止數據丟失
示例:
START TRANSACTION;UPDATE users SET balance = balance - 100 WHERE id = 1;COMMIT;
  • 在?COMMIT?前會先將該操作寫入 Redo Log。

2.?Undo Log(回滾日志)

  • 作用:確保事務的原子性(Atomicity)MVCC(多版本并發控制)
  • 記錄內容:邏輯日志,記錄修改前的數據狀態(如“將 id=1 的 balance 從 500 改為 400”)
  • 用途
    • 回滾未提交事務
    • 實現 MVCC,提供一致性讀視圖(consistent read view)

Undo Log 是事務可回滾的關鍵機制。

3.?事務日志緩沖區(Log Buffer)

  • 作用:臨時緩存 Redo Log,在合適時機刷新到磁盤。
  • 相關參數

    innodb_log_buffer_size = 16M # 默認16MB,建議增大至64M~256M

3.事務的生命周期

一個完整的事務流程如下:

1. 開始事務(BEGIN 或 START TRANSACTION)

  • InnoDB 分配事務對象(TRX 對象)
  • 初始化 Undo Log 空間

2. 執行 SQL 操作(DML)

  • 修改 Buffer Pool 中的數據頁
  • 寫入 Undo Log(記錄舊值)
  • 生成 Redo Log(記錄頁修改)

3. 提交事務(COMMIT)

  • 將 Redo Log 刷盤(默認行為,由?innodb_flush_log_at_trx_commit?控制)
  • 標記事務為已提交
  • 清理 Undo Log(根據是否被 MVCC 引用決定何時清理)

4. 回滾事務(ROLLBACK)

  • 使用 Undo Log 回退所有修改
  • 釋放事務資源

4.事務控制參數

參數名默認值說明
innodb_flush_log_at_trx_commit1控制 Redo Log 刷盤策略
autocommitON自動提交開關
tx_isolationREPEATABLE-READ事務隔離級別

innodb_flush_log_at_trx_commit?可選值:

行為安全性性能
0每秒刷盤一次????
1每次提交都刷盤(默認)????
2每次提交寫入 OS 緩沖,每秒刷盤????

5.事務與鎖的關系

InnoDB 使用行級鎖來保證事務的隔離性,主要涉及以下幾種鎖:

鎖類型描述
Record Lock鎖定索引記錄
Gap Lock鎖定索引記錄之間的間隙,防止幻讀
Next-Key LockRecord Lock + Gap Lock,InnoDB 默認使用的鎖機制

示例:

SELECT * FROM users WHERE age BETWEEN 10 AND 20 FOR UPDATE;

  • InnoDB 會對這個范圍加 Next-Key Lock,防止其他事務插入新記錄。

6.事務與 MVCC(多版本并發控制)

MVCC 是 InnoDB 實現高并發訪問的核心機制之一,依賴于:

  • Undo Log:保存歷史版本數據
  • Read View:每個事務看到的數據快照

在?REPEATABLE READ?隔離級別下,事務在整個生命周期內看到的是同一個 Read View。

7.事務的提交與崩潰恢復

如果 MySQL 在事務提交過程中宕機:

  1. Redo Log 已經寫入磁盤 → 數據恢復時可以重放 Redo Log,恢復事務修改
  2. Redo Log 未寫入 → 事務不會生效,數據保持原樣

這是 InnoDB 實現持久性崩潰恢復能力的關鍵。

8.查看事務信息

你可以使用如下命令查看當前事務狀態:

SHOW ENGINE INNODB STATUS\G

在輸出的?TRANSACTIONS?部分可以看到:

  • 當前活躍事務
  • 事務等待的鎖
  • Undo Log 使用情況等

9.總結表格

組件類型作用是否影響事務持久性是否影響事務原子性
Redo Log日志記錄頁修改,用于恢復??
Undo Log日志記錄舊值,用于回滾和 MVCC??
Log Buffer內存緩存 Redo Log??
鎖系統并發控制控制并發事務訪問??

如果你希望深入分析某個具體事務的行為(比如查看其 Redo/Undo Log 內容),我也可以指導你如何使用調試工具或日志文件進行分析。

?

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

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

相關文章

在GIS 工作流中實現數據處理

通過將 ArcPy 應用于實際的 GIS 工作流,我們可以高效地完成數據處理任務,節省大量時間和精力。接下來,本文將結合具體案例,詳細介紹如何運用 ArcPy 實現 GIS 數據處理的全流程。 數據讀取與合并 假設我們有多個 shapefile 文件&a…

第十四屆藍橋杯_省賽B組(C).冶煉金屬

題目如下: 拿到題我們來看一下,題目的意思,就是求出N個記錄中的最大最小值,言外之意就是,如果超過了這個最大值不行,如果小于這個最小值也不行,所以我們得出,這道題是一個二分答案的題目&#x…

??Android 如何查看CPU架構?2025年主流架構有哪些??

在開發安卓應用或選購手機時,了解設備的CPU架構至關重要。不同的架構影響性能、兼容性和能效比。那么,??如何查看安卓設備的CPU架構?2025年主流架構有哪些?不同架構之間有什么區別??? 本文將為你詳細解答。 ??1.…

飛算 JavaAI 2.0.0:開啟老項目迭代維護新時代

在軟件開發領域,老項目的迭代與維護一直是開發團隊面臨的難題。代碼邏輯混亂、技術棧陳舊、開發效率低下等問題,讓老項目改造猶如一場 “噩夢”。而飛算 JavaAI 2.0.0 版本的正式上線,通過三大核心能力升級,為老項目開發帶來了全新…

Linux初步介紹

Linux是一種開源的類Unix操作系統內核,廣泛應用于服務器、桌面、嵌入式設備等各種計算平臺。它由Linus Torvalds于1991年首次開發,因其穩定性、安全性和靈活性,被全球開發者和企業廣泛采用。 特點: 開放性(開源&#…

OneNet + openssl + MQTT

1.OneNet 使用的教程 1.在網絡上搜索onenet,注冊并且登錄賬號。 2.產品服務-----物聯網服務平臺立即體驗 3.在底下找到立即體驗進去 4.產品開發------創建產品 5.關鍵是選擇MQTT,其他的內容自己填寫 6.這里產品以及開發完成,接下來就是添加設…

行為設計模式之Memento(備忘錄)

行為設計模式之Memento(備忘錄) 前言: 備忘錄設計模式,有點像vmware快照可以回滾,idea的提交記錄同樣可以混滾,流程引擎中流程可以撤銷到或者回滾到某個指定的狀態。 1)意圖 在不破壞封裝性的…

動畫直播如何顛覆傳統?解析足球籃球賽事的數據可視化革命

在5G和AI技術快速發展的今天,體育賽事直播正在經歷一場深刻的變革。傳統視頻直播雖然能提供真實的比賽畫面,但在戰術可視化、數據深度和交互體驗方面存在明顯短板。而基于實時數據驅動的動畫直播技術,正通過創新的方式彌補這些不足&#xff0…

二刷蒼穹外賣 day01

nginx nginx反向代理 將前端發送的請求由nginx轉發到后端服務器 好處: 提速:nginx本身可緩存數據 負載均衡:配置多臺服務器,大量請求來臨可均衡分配 保證后端安全:不暴露后端服務真實地址 server{listen 80;server_…

5.2 HarmonyOS NEXT應用性能診斷與優化:工具鏈、啟動速度與功耗管理實戰

HarmonyOS NEXT應用性能診斷與優化:工具鏈、啟動速度與功耗管理實戰 在HarmonyOS NEXT的全場景生態中,應用性能直接影響用戶體驗。通過專業的性能分析工具鏈、針對性的啟動速度優化,以及精細化的功耗管理,開發者能夠構建"秒…

模型訓練-關于token【低概率token, 高熵token】

Qwen團隊新發現:大模型推理能力的提高僅由少數高熵 Token 貢獻 不要讓低概率token主導了LLM的強化學習過程 一 低概率詞元問題 論文:Do Not Let Low-Probability Tokens Over-Dominate in RL for LLMs 在RL訓練過程中,低概率詞元&#xff08…

XCTF-web-easyupload

試了試php,php7,pht,phtml等,都沒有用 嘗試.user.ini 抓包修改將.user.ini修改為jpg圖片 在上傳一個123.jpg 用蟻劍連接,得到flag

gRPC、WebSocket 與 HTTP 的核心區別對比

gRPC、WebSocket 與 HTTP 的核心區別對比,涵蓋通信模式、協議特性及適用場景: 🔄 ?一、通信模式? ?HTTP? ?單向請求-響應?:客戶端發起請求,服務器返回響應后連接立即關閉13。?無狀態協議?:每次請求…

Android第十三次面試總結(四大 組件基礎)

Activity生命周期和四大啟動模式詳解 一、Activity 生命周期 Activity 的生命周期由一系列回調方法組成,用于管理其創建、可見性、焦點和銷毀過程。以下是核心方法及其調用時機: ?onCreate()?? ?調用時機?:Activity 首次創建時調用。?…

講講JVM的垃圾回收機制

垃圾回收就是對內存堆中已經死亡或者長時間沒有使用的對象進行清楚或回收。 JVM 在做 GC 之前,會先搞清楚什么是垃圾,什么不是垃圾,通常會通過可達性分析算法來判斷對象是否存活。 在確定了那些垃圾可以被回收后,垃圾回收器&…

QT軟件外包開發費用

國內QT軟件外包開發費用是一個非常復雜的問題,沒有一個固定的價格,它受到多種因素的影響。以下將詳細闡述影響QT軟件外包開發費用的主要因素,并提供大致的價格區間供參考(請注意,這些價格僅為估算,實際報價…

iOS 16 SwiftUI 優雅跳轉實踐:用枚舉路由和 NavigationStack 實現多頁面導航

引言:跳轉的混亂與優雅的必要性 SwiftUI 給我們帶來了聲明式界面的全新開發體驗,但當涉及到頁面跳轉時,許多開發者仍然面臨一些“舊痛”。最初的 NavigationLink(destination:isActive:) 或 sheet(isPresented:) 等方式雖然能用,…

TikTok矩陣養號實戰:住宅IP純凈度與設備指紋聯動方案

在TikTok矩陣運營中,住宅IP純凈度和設備指紋管理是規避風控的核心。以下方案整合多平臺風控邏輯與實戰數據,覆蓋環境隔離、行為模擬到風險防控全流程。 🔧 一、住宅IP純凈度維持策略 IP篩選與驗證 靜態住宅IP優選:核心賬號綁定目標…

Elasticsearch增刪改查語句

創建索引庫:不帶映射的 PUT /索引名稱 {"settings": {"number_of_shards": 3, // 主分片數"number_of_replicas": 1 // 每個主分片的副本數} } 創建帶映射的索引庫: PUT /products {"settings": {"…

樹莓派4B, ubuntu20.04, 安裝Ros Noetic[踩坑記錄]

一、安裝過程 1. 硬件要求 樹莓派4B (建議4GB或8GB內存版本) 至少16GB的microSD卡 2. 下載并安裝Ubuntu 20.04 Ubuntu 20.04 LTS (Focal Fossa) for Raspberry Pi 使用Raspberry Pi Imager或BalenaEtcher將鏡像寫入microSD卡 3. 安裝ROS Noetic ?# 設置sources.list s…