【MySQL精通之路】InnoDB(3)-MVCC多版本管理

InnoDB是一個多版本(MVCC)的存儲引擎。

它保留有關更改行的舊版本的信息以支持事務性功能,如并發回滾

這些信息存儲在稱為回滾段的數據結構中的Undo表空間中。

參見“Undo表空間”。

InnoDB使用回滾段(rollback segment.中的信息來執行事務回滾中所需的撤消操作

它還使用這些信息構建行的早期版本,以實現一致的讀取。

參見“無鎖的一致讀”。


在內部,InnoDB向數據庫中存儲的每一行添加三個字段:

6字節DB_TRX_ID字段

指示插入或更新該行的最后一個事務的事務標識符。此外,刪除在內部被視為更新,行中的一個特殊位被設置為將其標記為已刪除。

7字節DB_ROLL_PTR字段

回滾指針。滾動指針指向寫入回滾段的撤消日志記錄。如果該行已更新,則撤消日志記錄包含在該行更新之前重新生成該行內容所需的信息。

6字節DB_ROW_ID字段

包含一個行ID,該行ID隨著新行的插入而單調增加。如果InnoDB自動生成聚集索引,則該索引包含行ID值。否則,DB_ROW_ID列不會出現在任何索引中。

回滾段中的撤消日志分為插入和更新Undolog。插入Undolog僅在事務回滾中需要,并且可以在事務提交后立即丟棄。

更新Undolog也用于一致讀,但只有在不存在InnoDB已為其分配快照的事務之后,才能丟棄這些日志。

一致讀中,快照可能需要更新Undolog中的信息來構建數據庫行的早期版本。

有關Undolog的更多信息,請參閱“Undolog”。

【MySQL精通之路】InnoDB(6)-磁盤結構(5)-Undolog-CSDN博客

建議您定期提交事務,包括只發出一致讀的事務。

否則,InnoDB無法丟棄更新Undolog中的數據,回滾段可能會過大。

從而填滿其所在的Undolog表空間

有關管理Undolog的信息,請參閱“Undolog表空間”。

回滾段中撤消日志記錄的物理大小通常小于相應的插入或更新行。您可以使用這些信息來計算回滾段所需的空間。

在InnoDB多版本控制(MVCC)方案中,當您使用SQL語句刪除一行時,它不會立即從數據庫中物理刪除。

當InnoDB丟棄為刪除而寫的更新Undolog記錄時,它只物理地刪除相應的行及其索引記錄。此刪除操作被稱為清除,而且速度非常快,通常與執行刪除的SQL語句所花費的時間順序相同

如果在表中以大致相同的速率小批量插入和刪除行,則清除線程可能會開始滯后,并且由于所有“死行”(dead rows),表可能會變得越來越大,從而使所有內容都綁定到磁盤,并且速度非常慢。

在這種情況下,通過調整innodb_max_purge_lag系統變量限制新行操作,并為清除線程分配更多資源。

有關更多信息,請參閱“清除配置”。

2.多版本控制和輔助索引

InnoDB多版本并發控制(MVCC)對待二級索引的方式不同于聚集索引

聚集索引中的記錄會立即更新,其隱藏的系統列指向撤消日志項,可以從中重建早期版本的記錄

與聚集索引記錄不同,輔助索引記錄不包含隱藏的系統列,也不會立即更新。

更新輔助索引列時,會對舊的輔助索引記錄進行刪除標記,插入新記錄,并最終清除帶有刪除標記的記錄。

當二級索引記錄被刪除標記或二級索引頁面被更新的事務更新時,InnoDB會在聚集索引中查找數據庫記錄。

在聚集索引中,檢查記錄的DB_TRX_ID,如果在啟動讀取事務后修改了記錄,則從撤消日志中檢索記錄的正確版本。

如果二級索引記錄被標記為刪除,或者二級索引頁由較新的事務更新,則不使用覆蓋索引技術。InnoDB不是從索引結構中返回值,而是在聚集索引中查找記錄。

但是,如果啟用了索引條件下推(ICP)優化,并且只能使用索引中的字段來評估WHERE條件的部分,MySQL服務器仍然會將WHERE條件的這一部分下推到使用索引進行評估的存儲引擎

如果找不到匹配的記錄,將避免進行聚集索引查找

如果找到匹配的記錄,即使在已刪除標記的記錄中,InnoDB也會在聚集索引中查找該記錄。

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

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

相關文章

TTS相關

文章目錄 VALL-E-X簡介code vist論文解讀代碼解讀模塊loss代碼 valle名詞解釋 VALL-E-X 簡介 微軟VALL-E-X:夸克在用 可以預訓練模型 端到端 code code:https://github.com/Plachtaa/VALL-E-X/tree/master 報錯1: File "/mnt/TTS/VALL-E-X/tes…

RabbitMQ有哪些優缺點

一,RabbitMQ有哪些優勢 RabbitMQ 作為一款流行的消息隊列服務,具有許多優勢,這些優勢使得它在各種應用場景中都能發揮出色的作用。以下是 RabbitMQ 的一些主要優勢: 高可靠性: RabbitMQ 使用持久化功能,無…

路由導航守衛-全局前置守衛

路由導航守衛中的全局前置守衛(Global Before Guards)是Vue Router中的一個重要概念。當路由即將改變(導航觸發)時,這些守衛會按照創建順序調用。它們允許你在路由跳轉之前執行一些操作或判斷,例如檢查用戶…

epoch的數據不能隨便截取,不是特征,要根據時間!!!

長個記性,這半個多月像個笑話,哈哈哈哈

pip如何快速install packet

1、在后面加-i https://mirrors.aliyun.com//pypi//simple或https://pypi.tuna.tsinghua.edu.cn/simple pip install numpy -i https://mirrors.aliyun.com//pypi//simplepip install numpy1.21.0 -i https://pypi.tuna.tsinghua.edu.cn/simple2、需要注意的是,如果…

IDEA指南

IDEA簡介 截止到2021.08.31,是全世界最流行的Java集成開發環境 tips 快捷鍵 ctrl alt v:快速生成方法返回值接收代碼/** enter:生成javaDoc注釋 IDEA常見error Error: java: System Java Compiler was not found in classpath Proj…

【Python設計模式04】策略模式

策略模式(Strategy Pattern)是一種行為型設計模式,它定義了一系列算法,并將每個算法封裝起來,使它們可以互相替換。策略模式讓算法的變化不會影響使用算法的客戶端,使得算法可以獨立于客戶端的變化而變化。…

Langchain:數據連接封裝、緩存封裝和LCEL學習和探索

🌵 目錄 🌵 😋 數據連接封裝 🍔 文檔加載器:Document Loaders 文檔處理器:TextSplitter 向量數據庫與向量檢索 總結 🍉 緩存封裝:Memory 🏖? 對話上下文&#xf…

上位機圖像處理和嵌入式模塊部署(mcu之芯片選擇)

【 聲明:版權所有,歡迎轉載,請勿用于商業用途。 聯系信箱:feixiaoxing 163.com】 目前市面上的mcu很多,有國產的,有進口的,總之種類很多。以stm32為例,這里面又包括了stm32f1、stm32…

Flutter 中的 LicensePage 小部件:全面指南

Flutter 中的 LicensePage 小部件:全面指南 在軟件開發中,遵守開源許可證的要求是至關重要的。Flutter 提供了一個內置的 LicensePage 小部件,它用于展示應用中使用的所有開源庫的許可證信息。本文將為您提供一個全面的指南,幫助…

git commit 規范

在提交代碼時標識本次提交的屬性 feat: 新功能(feature) fix: 修補bug docs: 文檔(documentation) style: 格式(不影響代碼運行的變動) refactor: 重構(即不是新增功能,也不是修改b…

熱愛無解 少年萬丈光芒!首席藝人【彭禹錦】登陸第八季完美童模全球賽

2024年7月,一檔由IPA模特委員會創辦于2017年的王牌少兒模特大賽即將拉開全球總決賽的帷幕!作為家喻戶曉的國民賽事——完美童模曾6季榮獲CCTV央視新聞報道,以創意引領、美學引領、和兼具文化底蘊的賽事特色,收獲了全球百萬親子家庭的喜愛。20…

深度學習之基于Pytorch+Flask Web框架預測手寫數字

歡迎大家點贊、收藏、關注、評論啦 ,由于篇幅有限,只展示了部分核心代碼。 文章目錄 一項目簡介 二、功能三、系統四. 總結 一項目簡介 一、項目背景與意義 隨著人工智能和深度學習的快速發展,手寫數字識別已成為一個重要的應用領域。該項目…

Python 實現批量文件重命名工具

在現代軟件開發中,圖形用戶界面 (GUI) 工具的創建是一個常見需求。對于那些需要頻繁處理文件的任務,擁有一個簡便的 GUI 工具尤為重要。在這篇博客中,我們將介紹如何使用 wxPython 創建一個簡單的批量文件重命名工具。該工具可以選擇一個文件…

判斷子序列二刷

文章目錄 1、描述2、思路3、notes4、復雜度 1、描述 給定字符串 s 和 t &#xff0c;判斷 s 是否為 t 的子序列。 你可以認為 s 和 t 中僅包含英文小寫字母。字符串 t 可能會很長&#xff08;長度 ~ 500,000&#xff09;&#xff0c;而 s 是個短字符串&#xff08;長度 <1…

Web開發——HTMLCSS

1、概述 Web開發分前端開發和后端開發&#xff0c;前端開發負責展示數據&#xff0c;后端開發負責處理數據。 HTML&CSS是瀏覽器數據展示相關的內容。 1&#xff09;網頁的組成部分 文字、圖片、音頻、視頻、超鏈接、表格等等 2&#xff09;網頁背后的本質 程序員寫的前端…

重大活動網絡安全保障建設及運營指南

在當今高度數字化的社會中&#xff0c;各類重大活動如會議、展覽、賽事及慶典等正面臨著日益復雜和嚴峻的網絡安全威脅。這些威脅不限于網絡入侵或數據泄露&#xff0c;更涉及到對基礎設施、關鍵信息系統和公眾輿論的復雜攻擊&#xff0c;需要國際社會的密切合作和長期關注。因…

一張圖看懂大模型性價比:能力、價格、并發量全面PK

最近&#xff0c;國內云廠商的大模型掀起一場降價風暴。火山引擎、阿里云、百度云等紛紛宣布降價&#xff0c;部分模型價格降幅據稱高達99%&#xff0c;甚至還有些模型直接免費。 五花八門的降價話術&#xff0c;一眼望去遍地黃金。但事實真的如此嗎&#xff1f;今天我們就撥開…

統計信號處理基礎 習題解答10-2

題目 兩個隨機變量x和y&#xff0c;如果聯合PDF分解為&#xff1a; 那么稱他們為條件獨立的。在上式中z是條件隨機變量。 我們觀察 其中, , 是相互獨立的。證明和是條件獨立的。給出條件變量是A。和是無條件獨立么&#xff1f;也就是 成立么&#xff1f;為了回答這個問題&…

如何使用jmap工具生成堆內存快照

1、確保已安裝JDK&#xff1a; 首先&#xff0c;確保你的系統上安裝了Java Development Kit (JDK)。 2、找到Java進程的PID&#xff1a; 你需要知道你想要生成堆內存快照的Java進程的進程ID&#xff08;PID&#xff09;。你可以使用命令行工具如ps&#xff08;在Unix/Linux系…