国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【MySQL】MVCC詳解與MVCC實現(xiàn)原理(MySQL專欄啟動)

這篇具有很好參考價值的文章主要介紹了【MySQL】MVCC詳解與MVCC實現(xiàn)原理(MySQL專欄啟動)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【MySQL】MVCC詳解與MVCC實現(xiàn)原理(MySQL專欄啟動)

??作者簡介:小明java問道之路,專注于研究 Java/ Liunx內核/ C++及匯編/計算機底層原理/源碼,就職于大型金融公司后端高級工程師,擅長交易領域的高安全/可用/并發(fā)/性能的架構設計與演進、系統(tǒng)優(yōu)化與穩(wěn)定性建設。

?? 熱衷分享,喜歡原創(chuàng)~ 關注我會給你帶來一些不一樣的認知和成長。

??

?? InfoQ簽約作者、CSDN專家博主/后端領域優(yōu)質創(chuàng)作者/內容合伙人、阿里云專家/簽約博主、51CTO專家 ??

??

??如果此文還不錯的話,還請??關注、點贊、收藏三連支持??一下博主~?

本文目錄

本文導讀

一、什么是MVCC

二、MVCC的實現(xiàn)原理

1、MVCC多版本實現(xiàn)

2、MVCC 實現(xiàn)原理

3、什么是 Read View

3.1、Read View 解析

3.2、Read View 含義

3.3、Read View 如何判斷版本鏈可用

三、當前讀,快照讀與MVCC

1、什么是當前讀和快照讀

1.1、當前讀

1.2、快照讀

2、快照讀、當前讀與MVCC辨析

3、MVCC 只在 RC 和 RR 隔離級別下工作

總結


本文導讀

本文是:MySQL事務隔離機制與實現(xiàn)原理詳解,的深入學習,我們在了解MySQL事務隔離機制與實現(xiàn)原理后,了解什么是MVCC,MVCC的實現(xiàn)原理,最后辨析當前讀和快照讀與MVCC和事務隔離的關系,更加全面和深入的MySQL事務隔離機制。文章來源地址http://www.zghlxwxcb.cn/news/detail-406996.html

一、什么是MVCC

MVCC,全稱 Multi-Version Concurrency Control ,MVCC是多版本并發(fā)控制的全稱,是指多版本的并發(fā)控制。MVCC是一種并發(fā)控制方法。通常,在數據庫管理系統(tǒng)中,它用編程語言實現(xiàn)對數據庫和事務存儲器的并發(fā)訪問。

MVCC 是一種在讀取數據時無需鎖定(加鎖)即可提高讀取效率和并發(fā)性的方法。

數據庫并發(fā)有以下情況:

1、讀-讀:沒有問題。

2、讀-寫:存在線程安全問題,這可能導致臟讀、幻讀和不可重復讀。

3、寫-寫:存在線程安全問題,更新可能會丟失。

二、MVCC的實現(xiàn)原理

首先我們回顧:MySQL事務隔離機制與實現(xiàn)原理詳解

這里面講解了,事務的特性、事務的隔離級別,當時說MySQL事務實現(xiàn)原理有單版本控制——鎖,以及多版本控制MVCC。

現(xiàn)在我們需要知道,在讀已提交RC,Read Committed)和可重復讀RR,Repeatable Read)隔離級別下的快照讀,都是基于MVCC實現(xiàn)的!

MVCC最大的優(yōu)點是沒有讀鎖,讀寫之間沒有沖突。在讀多寫少的OLTP(On-Line Transaction Processing,聯(lián)機事務處理)應用程序中,讀寫之間沒有沖突非常重要,這大大提高了系統(tǒng)的并發(fā)性。

1、MVCC多版本實現(xiàn)

為了讓您更直觀地理解MVCC的實現(xiàn)原理,這里通過事務更新一行記錄的過程的例子,來解釋MVCC中多個版本的實現(xiàn)。

假設 ID~……是表中字段的名稱(DATA)。最后三個隱藏字段對應對應行的隱藏ID、事務編號和回滾指針,如下圖所示:

隱含ID(DB_ROW_ID),6字節(jié),當InnoDB自動生成聚集索引時,聚集索引包括這個DB_ROW_ ID的值。

事務編號(DB_TRX_ID),6字節(jié),它標記了此行最新更新記錄的事務ID。每個事務都被處理,其值自動為+1。

回滾指針(DB_ROLL_PT),7個字節(jié),指向當前記錄項的回滾段的撤消日志記錄,通過該記錄可以找到以前版本的數據。

【MySQL】MVCC詳解與MVCC實現(xiàn)原理(MySQL專欄啟動)?

具體更新過程簡述如下:

首先,如果數據只是INSERT,則可以認為ID是 1,其他兩個字段為空。

當 事務1 更改此行的數據值時,將執(zhí)行,一、使用獨占鎖鎖定行,記錄重做日志;二、將修改前這一行的值復制到Undo日志;三、修改當前行的值,填寫事務ID,并使回滾指針指向撤銷日志中修改前的行。

接下來,與 事務1 相同。此時,undo 日志中有兩行記錄,它們由回滾指針連接。

因此,如果撤消日志沒有一直被刪除,那么當前記錄的回滾指針將追溯到創(chuàng)建該行時的初始內容。InnoDB中有一個清除線程,將查詢比最舊的活動事務更早的撤消日志并將其刪除,從而確保撤消日志文件不會無限增長。

2、MVCC 實現(xiàn)原理

它的實現(xiàn)原理主要是依賴記錄中的 3個隱式字段(DB_ROW_ID、DB_TRX_ID、DB_ROLL_PT),undo日志 , Read View 來實現(xiàn)的。

上面我們已經詳細介紹了3個隱式字段的含義,總結一下

默認情況下,DB_ROW_ID 是數據庫為這行記錄生成的唯一隱式主鍵。DB_TRX_ID 是當前操作記錄的事務ID,而 DB_ROLL_PTR 是一個回滾指針,與撤消日志一起使用以指向以前的舊版本。

有兩種 undo 日志:insert undo log、update undo log,幫助MVCC的撤銷的本質是update undo log 。事實上,撤消日志是回滾段中的舊記錄鏈。(MySQL日志系統(tǒng)的詳解:(待補充))。

3、什么是 Read View

什么是 Read View ?

Read View ?是事務執(zhí)行快照讀取操作時生成的視圖。在事務執(zhí)行快照讀取時,將生成數據庫系統(tǒng)的當前快照,并記錄和維護系統(tǒng)當前活動事務的ID(當每個事務啟動時,將分配一個ID,該ID是增量的,因此最新事務的ID值更大)。

當我們使用select讀取數據時,此時會有許多版本的數據,但我們不知道要讀取哪個版本。

此時,我們依賴readview來限制我們可以讀取的版本。只有通過readview才能知道我們可以閱讀哪個版本。

3.1、Read View 解析

Read View主要用于進行可見性判斷,也就是說,當我們?yōu)槭聞請?zhí)行快照讀時,我們會為記錄創(chuàng)建一個讀取視圖 Read View。以判斷當前事務可以看到哪個版本的數據。它可能是當前期間的最新數據,也可能是記錄 undo log 中某個版本的數據。

讀取視圖遵循可見性算法,主要是要修改的數據的最新記錄中的 DB_TRX_ID (即當前事務ID),并與系統(tǒng)中其他活動事務的ID(由讀取視圖 Read View 維護)進行比較。

如果 DB_TRX_ID 跟 Read View 屬性不符合可見性,通過 DB_ROLL_PTR 回滾指針在撤消日志Undo Log中的 DB_TRX_ID 比較中檢索數據庫(遍歷鏈表的 DB_TRX_ID)。

遍歷鏈接列表的DB _ TRX_ ID(從鏈的開始到鏈的結束,即從最近的修改),直到找到滿足特定條件的 DB_TRX_ID , 那么這個 DB_TRX_ID 所在的舊記錄就是當前事務能看見的最新老版本。

3.2、Read View 含義

在一個 Read View 快照中主要包括以下這些字段:

m_ids,表示生成 Read View 時當前系統(tǒng)中活動讀/寫事務的事務ID列表

min_trx_id,表示生成 Read View 時當前系統(tǒng)中活動讀/寫事務中最小的事務ID,即 m_ids 最小值

max_trx_id,表示生成 Read View 時應分配給系統(tǒng)中下一個事務的ID值

creator_trx_id,表示生成 Read View 的事務的事務ID

3.3、Read View 如何判斷版本鏈可用

trx_id == creator_trx_id,可以訪問這個版本;

trx_id < min_trx_id,可以訪問這個版本;trx_id > max_trx_id,不可以訪問這個版本;

min_trx_id <= trx_id <= max_trx_id,如果 trx_id 在 m_ids 中不可以訪問,反之可以

三、當前讀,快照讀與MVCC

1、什么是當前讀和快照讀

1.1、當前讀

select lock in share mode (共享鎖), select for update; update; insert; delete (排他鎖)這些操作都是一種當前讀。

它讀取最新版本的記錄,讀取時,它還確保其他并發(fā)事務無法修改當前記錄,并鎖定讀取的記錄。

1.2、快照讀

不加鎖的 select 操作就是快照讀,即無鎖的非阻塞讀取;

快照讀的前提是隔離級別不是串行級別,在串行級別下讀取的快照將退化為當前讀取,發(fā)生快照讀的原因是基于提高并發(fā)性能的考慮。

快照讀的實現(xiàn)基于多版本并發(fā)控制,即MVCC。MVCC可以被認為是行鎖的變體,但在許多情況下,它避免了鎖操作并減少了開銷;由于它基于多個版本,也就是說,讀取的快照可能不是數據的最新版本,而是以前的歷史版本

MVCC的設計目的是在不鎖定讀寫沖突,這種讀取指的是快照讀取,而不是當前讀取。

當前的讀取實際上是一個鎖操作,這是悲觀鎖的實現(xiàn)

2、快照讀、當前讀與MVCC辨析

MVCC多版本并發(fā)控制的概念是“維護一個數據的多個版本,以便讀寫操作之間沒有沖突”。

因為MVCC只是一個抽象的概念,為了實現(xiàn)這樣的概念,MySQL需要提供特定的功能來實現(xiàn)它?!翱煺兆x取是MySQL MVCC理想模型的非阻塞讀取功能之一”。

相對而言,當前讀是悲觀鎖的具體功能實現(xiàn),快照閱讀本身也是一個抽象概念。

3、MVCC 只在 RC 和 RR 隔離級別下工作

一、 在RC(Read Commited )的隔離級別下,每次快照讀取都會生成并獲得最新的?readview。

二、在RR(Repeatable Read)隔離級別,只有讀取同一事務的第一個快照才能創(chuàng)建?readview。每個后續(xù)快照讀取都使用相同的 readview,因此每個查詢結果都相同。

總結

本文是:MySQL事務隔離機制與實現(xiàn)原理詳解,的深入學習,我們在了解MySQL事務隔離機制與實現(xiàn)原理后,了解什么是MVCC,MVCC的實現(xiàn)原理,最后辨析當前讀和快照讀與MVCC和事務隔離的關系,更加全面和深入的MySQL事務隔離機制。

到了這里,關于【MySQL】MVCC詳解與MVCC實現(xiàn)原理(MySQL專欄啟動)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【MySQL】左連接右連接內連接與Hash連接、子查詢原理與實戰(zhàn)(MySQL專欄啟動)

    【MySQL】左連接右連接內連接與Hash連接、子查詢原理與實戰(zhàn)(MySQL專欄啟動)

    ??作者簡介: 小明java問道之路,專注于研究 Java/ Liunx內核/ C++及匯編/計算機底層原理/源碼,就職于大型金融公司后端高級工程師,擅長交易領域的高安全/可用/并發(fā)/性能的架構設計與演進、系統(tǒng)優(yōu)化與穩(wěn)定性建設。 ?? ?? 熱衷分享,喜歡原創(chuàng)~ 關注我會給你帶來一些不一

    2024年02月02日
    瀏覽(15)
  • 【進階篇】MySQL的MVCC實現(xiàn)機制詳解

    【進階篇】MySQL的MVCC實現(xiàn)機制詳解

    在數據庫領域,對數據進行并發(fā)操作是常見的需求。為了保證數據的一致性和事務的隔離性,不同的數據庫系統(tǒng)采用了不同的并發(fā)控制技術。其中,多版本并發(fā)控制(MVCC,Multiversion Concurrency Control)是MySQL中InnoDB存儲引擎采用的一種非常重要的并發(fā)控制技術。 MVCC通過創(chuàng)建數據

    2024年02月09日
    瀏覽(23)
  • MySQL多版本并發(fā)控制mvcc原理淺析

    MySQL多版本并發(fā)控制mvcc原理淺析

    1.mvcc簡介 1.1mvcc定義 mvcc(Multi Version Concurrency Control),多版本并發(fā)控制,是一種數據庫的并發(fā)控制機制。它用于管理事務并發(fā)執(zhí)行時對數據的訪問和修改,保證在多個事務同時對數據庫進行讀寫操作,不會出現(xiàn)數據不一致或丟失的情況 1.2mvcc解決的問題 當多個事務同時訪問數據

    2024年04月25日
    瀏覽(27)
  • Mysql進階-InnoDB引擎事務原理及MVCC

    Mysql進階-InnoDB引擎事務原理及MVCC

    事務是一組操作的集合,它是一個不可分割的工作單位,事務會把所有的操作作為一個整體一起向系 統(tǒng)提交或撤銷操作請求,即這些操作要么同時成功,要么同時失敗。 ?事務的四大特性: 原子性(Atomicity):事務是不可分割的最小操作單元,要么全部成功,要么全部失敗

    2024年02月04日
    瀏覽(24)
  • mysql的mvcc詳解

    mysql的mvcc詳解

    1 .MVCC(Multiversion Concurrency Control)多版本并發(fā)控制 。即 通過數據行的多個版本管理來實現(xiàn)數據庫的并發(fā)控制 ,使得在InnoDB事務隔離級別下執(zhí)行 一致性讀 操作有了保障。 2.mysql中的InnoDB中實現(xiàn)了 MVCC主要是為了提高數據庫的并發(fā)性能,在無鎖的情況下也能處理讀寫并發(fā) ,大大

    2024年02月07日
    瀏覽(13)
  • 【MYSQL篇】mysql中相關鎖和MVCC詳解

    【MYSQL篇】mysql中相關鎖和MVCC詳解

    數據庫的鎖是在多線程高并發(fā)的情況下用來保證數據穩(wěn)定性和一致性的一種機制。MySQL 根據底層存儲引擎的不同,鎖的支持粒度和實現(xiàn)機制也不同。MyISAM 只支持表鎖,InnoDB 支持行鎖和表鎖。目前 MySQL 默認的存儲引擎是 InnoDB,這里主要介紹 InnoDB 的鎖。上一篇文章,我們對

    2024年02月10日
    瀏覽(25)
  • ⑩⑧【MySQL】InnoDB架構、事務原理、MVCC多版本并發(fā)控制

    ⑩⑧【MySQL】InnoDB架構、事務原理、MVCC多版本并發(fā)控制

    個人簡介:Java領域新星創(chuàng)作者;阿里云技術博主、星級博主、專家博主;正在Java學習的路上摸爬滾打,記錄學習的過程~ 個人主頁:.29.的博客 學習社區(qū):進去逛一逛~ InnoDB邏輯存儲結構 : ?? 表空間(idb文件) :一個MySQL實例可以對應多個表空間,用于存儲記錄、索引等數

    2024年02月04日
    瀏覽(53)
  • 深入探索MySQL InnoDB引擎中的多版本并發(fā)控制(MVCC)原理

    引言: 在關系型數據庫領域,MySQL InnoDB引擎因其支持事務處理和并發(fā)控制的強大功能而備受青睞,其中尤為關鍵的一項技術就是多版本并發(fā)控制(Multi-Version Concurrency Control, MVCC)。MVCC是實現(xiàn)高并發(fā)環(huán)境下事務隔離性的重要手段,既能有效緩解鎖競爭,又能保障數據的一致性

    2024年03月11日
    瀏覽(18)
  • 【MySQL】高性能高可用表設計實戰(zhàn)-表設計篇(MySQL專欄啟動)

    【MySQL】高性能高可用表設計實戰(zhàn)-表設計篇(MySQL專欄啟動)

    ??作者簡介: 小明java問道之路,專注于研究 Java/ Liunx內核/ C++及匯編/計算機底層原理/源碼,就職于大型金融公司后端高級工程師,擅長交易領域的高安全/可用/并發(fā)/性能的架構設計與演進、系統(tǒng)優(yōu)化與穩(wěn)定性建設。 ? ?? 熱衷分享,喜歡原創(chuàng)~ 關注我會給你帶來一些不一樣

    2024年02月11日
    瀏覽(22)
  • Mysql MVCC實現(xiàn)

    Mysql MVCC實現(xiàn)

    并發(fā)事務可能產生的問題: 讀+讀,并發(fā)讀不會有問題 讀+寫,并發(fā)讀寫可能會發(fā)生臟讀、不可重復讀、幻讀 寫+寫,并發(fā)修改同一行數據,可能產生數據丟失(會滾丟失、覆蓋丟失)等問題 MVCC(Mutil Version Concurrency Control)多版本并發(fā)控制,是一種并發(fā)訪問的機制(非具體實

    2023年04月23日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包