mysql的mtr是指什么_MySQL中MTR的概念

MTR全稱是Mini-Transaction,顧名思義,可以理解為"最小的事務",MySQL中把對底層頁面的一次原子訪問的過程稱之為一個Mini-Transaction,這里的原子操作,指的是要么全部成功,要么全部失敗,不存在中間狀態。

MTR主要是被用在寫undo log和redo log的場景下的。例如,我們要向一個B+樹索引中插入一條記錄,此時要么插入成功,要么插入失敗,這個過程就可以稱為一個MTR過程,這個過程中會產生一組redo log日志,這組日志在做MySQL的崩潰恢復的時候,是一個不可分割的整體。

假如我們有一個事務,事務中包含3條語句,那么MTR的概念圖如下:

1ecf1cc4843bdb323531872efed851ef.png

Mini-Transaction一般遵循三條原則:

1、the fix rules

2、WAL

3、force-log-at-commit

這里我們解釋下這三條原則:

1、the fix rules

解釋第一條規則之前,我們有必要了解下MySQL中的latch的概念,在MySQL中,latch是一種輕量級的鎖,與lock不同,它鎖定的時間特別短,在innodb中,latch又可以分為mutex(互斥量)和rwlock(讀寫鎖)2種,它的目的在于保證并發線程操作臨界資源的正確性。

理解了latch的概念,我們看看the fix rule規則:

修改一個數據頁,需要獲得這個數據頁的x-latch;

訪問一個頁是需要獲得s-latch或者x-latch;

持有該頁的latch直到修改或者訪問該頁的操作完成才釋放

2、WAL

WAL技術想必大家比較熟悉,它是Innodb存儲引擎之所以支持崩潰恢復的根本,也就是持久化一個數據頁之前,需要將內存中響應的日志頁先持久化

3、force-log-at-commit

這條原則比較重要,它是指在事務提交的時候,其產生的所有MTR日志都要刷到持久化設備中,從而保證崩潰恢復的邏輯。

之所以介紹MTR,是為了后續介紹MySQL8.0的redo log 優化做準備,在MySQL5.7中,mtr保證了事務內部操作的原子性。當用戶進行操作的時候,會更新數據頁,同時寫redo log,mtr是redo log的載體,存在每個連接會話的私有變量中。當mtr提交時,會將本地redo log拷貝到全局的log_buffer中,為了保證redo log的有序性,需要加鎖來訪問log_buffer,這把鎖就是上面提到的mutex,在這個鎖保護下,除了要將本地日志拷貝到全局buffer,還需要將數據頁加入了flush_list,供后臺線程刷臟,輔助數據庫檢查點持續往前推進,所以這個鎖在舊版本的MySQL中競爭非常激烈。MySQL8.0將這個問題進行了優化,后面的文章中將著重分析。

時間原因,先到這里吧。

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

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

相關文章

前端:Element UI 多選框組用法筆記

今天給大家分享一下Element UI 多選框組用法筆記&#xff0c;直接上代碼&#xff01;<html><head></head><body><el-form> <el-form-item label"興趣愛好:"> <el-checkbox-group v-model"form.checkList"> <…

xiaocms 關于搜索功能 添加搜索字段

自己折磨了好幾天 就是沒研究個出像樣的的東西 看了一下 core/controller/index.php searchAction()方法 但是不知從何下手。查了sql語句&#xff0c;還是沒實現 請教了一位自學php的小弟 &#xff0c;人家三下五除二的功夫就做出來了 解決的思路是一樣的&#xff0c;可我就是…

python編程第四版_清華編程教授強力推薦《Python編程》,指導你如何學習python

Python編程真的那么容易嗎&#xff1f;僅僅是看理論就可以學以致用嗎&#xff1f;今天我給你介紹的這本書&#xff0c;也許會讓你開始改變這種想法&#xff0c;因為這本書上的練習和案例以及指導本身就足夠學好Python了。清華編程教授強力推薦《Python編程》&#xff0c;指導你…

java 構造 statict_java學習:構造方法、static、final

在了解了java的基本數據結構后&#xff0c;開始學習java的類。java中的類也是一種數據結構&#xff0c;我認為它和C中的結構體挺像。類中可以有屬性和方法。類的方法中比較特別的是構造方法。java中類的構造方法要和類名相同&#xff0c;且沒有返回值。構造方法主要用于為類的對…

微信終于可以發送大文件了!

來源丨擴展迷EXTFANS&#xff08;ID&#xff1a;infinitydaily&#xff09;https://mp.weixin.qq.com/s/EAwYnq7435oMQnz6JqkHYg微信作為一款國民級的通訊軟件&#xff0c;雖然用戶基數龐大&#xff0c;但在用戶體驗方面一直飽受詬病&#xff0c;尤其是在部分功能方面&#xff…

Iterable 超級接口

這是一個老祖宗,一代一代往下撥 collection 的方法如下,是一個跟接口方法如下,見API collection : add():添加一個元素     addAll():添加一組元素 clear();清空     remove(Object o) &#xff1a;移除     removeAll():移除一組元素     isEmpty();判斷集合…

pc寄存器or程序計數器

一&#xff1a;PC寄存器解釋 二&#xff1a;PC寄存器的作用

項目設計基礎:處理過程設計相關知識介紹?

處理過程設計關鍵是用一種適當的表示形式來描述每個模塊執行過程。常用的表示形式有圖形、語言、表格。比如傳統的框圖、判定表等。1、程序流程圖&#xff08;Program Flow Chart&#xff09;程序流程圖也成為程序框圖&#xff0c;是最早、流行最廣泛的一種圖形表示方法。程序流…

關于JS中的定時器!!!

定時器: 周期性定時器 一次性定時器 1. 周期性定時器: 讓程序每隔一段時間間隔&#xff0c;反復執行一項任務 何時使用: 只要連續&#xff0c;有規律的持續播放的動畫 如何使用: 3件事&#xff1a; 1. ***任務函數: 定時器每次執行的任務 function task(){...} 任務函數通常要…

python 更新數據庫歷史_python 實現數據庫中數據添加、查詢與更新的示例代碼

一、前言最近做web網站的測試&#xff0c;遇到很多需要批量造數據的功能&#xff1b;比如某個頁面展示數據條數需要達到10000條進行測試&#xff0c;此時手動構造數據肯定是不可能的&#xff0c;此時只能通過python腳本進行自動構造數據&#xff1b;本次構造數據主要涉及到在某…

git沖突“accept theirs”和“accept yours”

Accept Yours 就是直接選取本地的代碼&#xff0c;覆蓋掉遠程倉庫的 Accept Theirs 是直接選取遠程倉庫的&#xff0c;覆蓋掉自己本地的 我們選擇Merge,自己手動行進選擇、修改。 這里左邊部分是你本地倉庫的代碼&#xff0c;右邊部分是遠程倉庫的代碼&#xff0c;中間的res…

系統實施基礎:系統實施的相關知識介紹

1、系統實施的目的系統實施屬于新系統開發工作的最后一個階段&#xff0c;屬于交付系統給客戶的最后階段。2、系統實施的任務硬件準備&#xff1a;按照總體設計方案準備服務器、配置網絡系統。主要包括計算機主機/云服務器、輸入輸出設備、存儲設備、通信設備等。軟件準備&…

線程同步以及yield()、wait()、Notify()、Notifyall()

一、線程同步 1、線程同步的目的是為了保護多個線程訪問一個資源時對資源的破壞。2、線程同步方法是通過鎖來實現&#xff0c;每個對象都有切僅有一個鎖&#xff0c;這個鎖與一個特定的對象關聯&#xff0c;線程一旦獲取了對象鎖&#xff0c;其他訪問該對象的線程就無法再訪問該…

面試:整理面試中常被問到的8種數據結構

數據結構是一種特殊的組織和存儲數據的方式&#xff0c;可以使我們可以更高效地對存儲的數據執行操作。數據結構在計算機科學和軟件工程領域具有廣泛而多樣的用途。幾乎所有已開發的程序或軟件系統都使用數據結構。此外&#xff0c;數據結構屬于計算機科學和軟件工程的基礎。當…

python繪制繁花曲線代碼_使用python和pygame繪制繁花曲線的方法

前段時間看了一期《最強大腦》&#xff0c;里面各種繁花曲線組合成了非常美麗的圖形&#xff0c;一時心血來潮&#xff0c;想嘗試自己用代碼繪制繁花曲線&#xff0c;想怎么組合就怎么組合。真實的繁花曲線使用一種稱為繁花曲線規的小玩意繪制&#xff0c;繁花曲線規由相互契合…

Axure原型制作規范

一、 名詞定義&#xff1a; Sitemap 導航圖Widgets 組件Master 庫Label 控件名Interactions 交互動作Annotations 注釋Location and size 位置和尺寸二、 Widgets規范 本站常用widgets規范&#xff1a;命名規范&#xff1a;制定命名規范從而方便搜索和升級。 a. 全站使用&#…

系統測試相關知識筆記

1、系統測試的意義系統測試是為了發現系統中的錯誤而執行程序的過程&#xff0c;發現系統中存在的問題&#xff0c;及時處理掉&#xff0c;從而規避項目后續階段順利推進的風險、和高質量的軟件交付給客戶。2、系統測試的目的希望以最少的人力和時間發現潛在的各種錯誤和缺陷。…

最小生成樹練習1(克魯斯卡爾算法Kruskal)

今天刷一下水題練手入門&#xff0c;明天繼續。 poj1861 Network&#xff08;最小生成樹&#xff09;新手入門題。 題意&#xff1a;輸出連接方案中最長的單根網線長度&#xff08;必須使這個值是所有方案中最小的&#xff09;&#xff0c;然后輸出方案。 題解&#xff1a;本題…