進階篇07——InnoDB引擎介紹

概覽

邏輯存儲結構

架構

當執行增刪改查操作時,操作的是緩沖區的數據,如果緩沖區里沒有要操作的數據,就會從磁盤中讀取數據加載到緩沖區中;緩沖區的數據會以一定的頻率通過后臺線程刷新到磁盤中永久存儲。

內存結構?

?

磁盤結構

后臺線程

后臺線程的作用就是在合適的時機將內存緩沖池的數據刷新到磁盤文件當中

事務原理

基本概念

redo.log日志

解決事務的持久性

當客戶端執行增刪改操作時,就會去操作緩沖池中的數據(如果此時緩沖池沒有所需要的數據,就會去磁盤文件中加載需要的數據到緩沖池里),然后對相應的數據頁進行更改。緩沖池的某些數據頁被更改后,和磁盤里存儲的數據就不一致了,緩沖池里這些被修改的數據頁就稱為臟頁。在一定的時機里,會通過后臺線程將臟頁的數據刷新到磁盤中進行永久化存儲,但是這個刷新的過程可能會出錯,那么更改的數據就會丟失,但在客戶端提交事務時,就已經在更改緩沖池的數據之后告知客戶端更改完成,這時候就出現了問題。而redo.log就是解決這個問題的。在客戶端進行增刪改時,會對緩沖池中的數據頁進行增刪改操作,在操作之后會將更改過的數據頁即臟頁立即刷新到redo log buffer中,在客戶端提交事務之后,立即將redo log buffer中的臟頁數據刷新到磁盤中的redo.log日志文件中,這樣當后臺線程將緩沖池中的數據刷新到磁盤出錯時,就可以用redo.log中的數據進行數據恢復

為什么每一次提交事務的時候,要把數據刷新到redo log buffer中,而不是直接將buffer pool中的臟頁刷新到磁盤中?這是因為直接將buffer pool中的數據刷新到磁盤中,存在嚴重的性能問題;在執行增刪改操作時,所操作的數據在磁盤中的位置都是隨機的,就涉及到了大量的隨機磁盤IO,性能就比較低。而redo log buffer通過異步IO將數據刷新到磁盤中的redo.log日志文件中,日志文件都是在文件末尾追加數據的,此時就是順序磁盤IO,性能就高于隨機磁盤IO。

如果臟頁中的數據已經順利的刷新到磁盤中的ibd文件里,此時redo.log中的數據就已經沒有用了,因為數據已經存在ibd文件中了,所以每隔一段時間就回去清理redo.log中的數據

undo.log 日志

解決事務的原子性

有兩個作用:一是在事務執行失敗進行回滾時需要用到undo.log,還有一個用于就是MVCC多版本并發控制?

MVCC 多版本并發控制

基本概念

視頻教程:?基本概念

實現原理

記錄中的隱藏字段

undo.log 日志

readview

視頻教程:readview

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

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

相關文章

數據結構(Java):順序表集合類ArrayList

1、線性表 線性表,在邏輯結構上是連續的(可理解為連續的一條直線,一對一的關系),而在物理結構上不一定連續,通常以數組和鏈式結構進行存儲。 線性表是一種在實際中廣泛使用的數據結構,常見的線…

Vue介紹與入門(一篇入門)

Vue.js 是一個流行的 JavaScript 框架,專門用于構建用戶界面和單頁面應用程序。它簡單易學,但功能強大,能夠幫助開發者快速構建交互性強的 Web 應用。 本教程旨在幫助那些剛開始學習 Vue.js 的開發者快速入門,并掌握一些基礎知識…

【UE5.1 角色練習】12-坐騎——Part2(讓角色騎上坐騎)

目錄 前言 效果 步驟 一、坐騎的父類 二、將角色附加到坐騎 三、添加坐姿 四、騎上坐騎 五、從坐騎上下來 前言 在上一篇(【UE5.1 角色練習】11-坐騎——Part1(控制大象移動))基礎上繼續實現角色騎上坐騎的功能。 效果 …

語言的數據結構:樹與二叉樹(二叉樹篇)

語言的數據結構:樹與二叉樹(二叉樹篇) 前言概念特別的二叉樹滿二叉樹完全二叉樹 存儲結構順序存儲鏈式存儲 查找方式 前言 上文說到了樹,有人認為二叉樹是樹的每一個分支都有兩個子節點。其實這也對。但二叉樹在此基礎上還做了限…

RS422串口通信協議介紹和基礎代碼實現

**RS-422串口協議介紹**RS-422是一種工業標準的通信接口,其全稱是“平衡電壓數字接口電路的電氣特性”。它是在RS-232的基礎上發展而來,旨在解決RS-232通信距離短和速率低的缺點。以下是對RS-422串口協議的詳細介紹:傳輸速率與距離&#xff1…

MyCAT 2 簡單入門

MyCAT 2 基礎 什么是 MyCAT 2? MyCAT 2 是一款開源的數據庫中間件,它主要用于解決數據庫的分庫分表、讀寫分離等問題。MyCAT 2 基于 MyCAT 1 的架構進行優化和重構,具有更高的性能和穩定性,支持多種數據庫類型,包括 …

【QCustomPlot實戰系列】QCPGraph區域高亮

使用QCPDataSelection來設置選中的區域&#xff0c;并將QCPGraph的可選擇區域設置成QCP::stMultipleDataRanges void AreaPieces::initCustomPlot(QCustomPlot *parentPlot) {QVector<double> x {0, 1, 2, 3, 4, 5, 6, 7, 8};QVector<double> y {200, 560, 750…

《mysql篇》--mysql常用命令

數據庫操作 顯示當前數據庫 show databases;(database 后面要加s) 這行命令用來顯示當前有多少個數據庫 //mysql中有自帶的四個庫 創建數據庫 create database 數據庫名(name); 創建一個數據庫 create dabase if not exists <數據庫名(name)>; //如果系統有與當前創建…

前端vite+vue3——利用環境變量和路由區分h5、pc模塊打包(從0到1)

?前言 大家好&#xff0c;我是yma16&#xff0c;本文分享 前端vitevue3——利用環境變量和路由對前端區分h5和pc模塊打包&#xff08;從0到1&#xff09;。 背景&#xff1a; 前端本地開發pc和h5的項目&#xff0c;發布時需要區分開h5和pc的頁面 vite Vite 通過在一開始將應…

圖片怎么加水印?快來試試這6個圖片加水印方法(2024年新)

圖片怎么加水印&#xff1f;作為打工人在日常的工作生活中總會遇到各種各樣的工作難題&#xff0c;相信從事電商或者是設計等工作的小伙伴們&#xff0c;遇到最多的問題應該就是給圖片添加水印了。為什么要給圖片加水印&#xff1f;其實給圖片加水印最主要的目的是保護我們的圖…

刷題——二叉樹的中序遍歷

雙指針法 void midorder(vector<int>&res, TreeNode* root){if(root NULL) return;midorder(res, root->left);res.push_back(root->val);midorder(res, root->right);}vector<int> inorderTraversal(TreeNode* root) {// write code herevector<…

代碼隨想錄算法訓練營第四十九天|LeetCode300 最長遞增子序列、LeetCode674 最長連續遞增序列、LeetCode718 最長重復子數組

題1&#xff1a; 指路&#xff1a;300. 最長遞增子序列 - 力扣&#xff08;LeetCode&#xff09; 思路與代碼&#xff1a; 求最長遞增子序列&#xff0c;那么就定義一個數組dp[i]&#xff0c;含義為最長遞增子序列。這里有一個小問題&#xff0c;這里的序列的范圍為何。如果…

一文入門Makefile

今天我們來玩玩Makefile。 這邊是借鑒的陳皓老師的《跟我一起寫 Makefile》 pdf下載鏈接如下。 鏈接&#xff1a;https://pan.baidu.com/s/1woRq2nEkgzLv1o5uE0FZHg?pwdmhrh 提取碼&#xff1a;mhrh 我們之前已經算是入門了gcc&#xff0c;那我們的下一站就是Makefile&…

http和https請求總結

http請求是不安全的請求的端口是80&#xff0c;https請求是安全的請求的端口是443 但是請求安全也不是絕對的。 要想先了解https就的先說幾個概念 1、證書 2、加密算法 openssl TLS/SSL 3、協議x509協議 http傳輸數據都是明文&#xff0c;在數據傳輸的過程會經過很長的鏈路…

C#面: 能夠將非靜態的方法覆寫成靜態方法嗎?

在C#中&#xff0c;不能將非靜態方法覆寫成靜態方法。這是因為靜態方法是屬于類的&#xff0c;而非靜態方法是屬于類的實例的。覆寫&#xff08;重寫&#xff09;是指在派生類中重新實現基類中的虛方法或抽象方法&#xff0c;以改變其行為。而靜態方法是無法被派生類所繼承的&a…

嵌入式學習(Day 51:ARM指令/匯編與c語言函數相互調用)

1.Supervisor模式與SVC模式 Supervisor模式是ARM處理器的一個特權工作模式&#xff0c;允許執行特權指令和訪問特權資源。SVC模式&#xff08;Supervisor Call&#xff09;是與Supervisor模式相關的一個功能或指令&#xff0c;用于從用戶模式切換到Supervisor模式&#xff0c;…

1、Redis系列-Redis高性能原理詳解

Redis高性能原理詳解 Redis是一款高性能的內存數據庫&#xff0c;廣泛應用于需要快速讀寫訪問的數據密集型應用中。它的高性能得益于多方面的設計和優化。以下是Redis高性能實現的詳細解釋&#xff1a; 1. 單線程架構 Redis采用單線程架構來處理客戶端請求&#xff0c;這與傳…

服務器流量收發測試-續篇

文章目錄 一、概述二、普通java工程1&#xff0c;pom文件2&#xff0c; 定時任務3&#xff0c;打包4&#xff0c;jar運行 三、打包docker鏡像1&#xff0c;鏡像打包配置docker環境&#xff1a;2&#xff0c;連接遠程鏡像倉庫 四、部署運行1. 容器運行2. 單容器多次運行jar3. 容…

大模型應用研發基礎環境配置(Miniconda、Python、Jupyter Lab、Ollama等)

老牛同學之前使用的MacBook Pro電腦配置有點舊&#xff08;2015 年生產&#xff09;&#xff0c;跑大模型感覺有點吃力&#xff0c;操作起來有點卡頓&#xff0c;因此不得已撿起了塵封了快兩年的MateBook Pro電腦&#xff08;老牛同學其實不太喜歡用 Windows 電腦做研發工作&am…

04_記錄鎖

記錄鎖&#xff08;Record Lock&#xff09; 文章目錄 記錄鎖&#xff08;Record Lock&#xff09;簡介原理加鎖流程鎖類型使用場景示例與其他鎖的對比結論 簡介 MySQL 中的記錄鎖&#xff08;Record Lock&#xff09;是行級鎖的一種&#xff0c;用于鎖定數據庫表中的特定行。…