欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入理解Mysql中的MVCC

 更新時(shí)間:2023年09月09日 14:32:33   作者:這是一條海魚  
這篇文章主要介紹了深入理解Mysql中的MVCC,同樣的sql查詢語句在一個(gè)事務(wù)?里多次執(zhí)行查詢結(jié)果相同,就算其它事務(wù)對數(shù)據(jù)有修改也不會影響當(dāng)前事務(wù)sql語句的查詢結(jié)果,?這個(gè)隔離性就是靠MVCC機(jī)制來保證的,需要的朋友可以參考下

MVCC多版本并發(fā)控制機(jī)制

同樣的sql查詢語句在一個(gè)事務(wù) 里多次執(zhí)行查詢結(jié)果相同,就算其它事務(wù)對數(shù)據(jù)有修改也不會影響當(dāng)前事務(wù)sql語句的查詢結(jié)果, 這個(gè)隔離性就是靠MVCC(Multi-Version Concurrency Control)機(jī)制來保證的。

對一行數(shù)據(jù)的讀和寫兩個(gè)操作默認(rèn) 是不會通過加鎖互斥來保證隔離性,避免了頻繁加鎖互斥,而在串行化隔離級別為了保證較高的隔離性是通過將所有操 作加鎖互斥來實(shí)現(xiàn)的。 Mysql在讀已提交和可重復(fù)讀隔離級別下都實(shí)現(xiàn)了MVCC機(jī)制。

MVCC的具體實(shí)現(xiàn),還需要依賴于數(shù)據(jù)庫記錄中的三個(gè)隱式字段、undo log日志、readView。

三個(gè)隱式字段如下

隱藏字段含義
db_trx_id最近修改事務(wù)id,記錄插入這條記錄或最后一次修改該記錄的事務(wù)id。
db_roll_ptr回滾指針,指向這條記錄的上一個(gè)版本,用于配合undo log,指向上一個(gè)版本。
db_row_id隱藏主鍵,如果表結(jié)構(gòu)沒有指定主鍵,將會生成該隱藏字段。
  • undo log,回滾日志,在insert、update、deletel的時(shí)候產(chǎn)生的便于數(shù)據(jù)回滾的日志。
  • 當(dāng)insert的時(shí)候,產(chǎn)生的undo log日志只在回滾時(shí)需要,在事務(wù)提交后,可被立即刪除。
  • 而update、deletel的時(shí)候,產(chǎn)生的undo log日志不僅在回滾時(shí)需要,在快照讀時(shí)也需要,不會立即被刪除。

undo log日志版本鏈?zhǔn)侵敢恍袛?shù)據(jù)被多個(gè)事務(wù)依次修改過后,在每個(gè)事務(wù)修改完后,Mysql會保留修改前的數(shù)據(jù)undo log回滾日志,并且用兩個(gè)隱藏字段db_trx_id和db_roll_ptr把這些undo log日志串聯(lián)起來形成一個(gè)歷史記錄版本鏈

在這里插入圖片描述

不同事務(wù)或相同事務(wù)對同一條記錄進(jìn)行修改,會導(dǎo)致該記錄的undolog生成一條記錄版本鏈表,鏈表的頭部是最新的舊記錄,鏈表尾部是最早的舊記錄。

版本鏈數(shù)據(jù)訪問規(guī)則 ①.trx_id==creator_trx_id?可以訪問該版本成立,說明數(shù)據(jù)是當(dāng)前這個(gè)事務(wù)更改的。

②.trx_id<min_trx_id?可以訪問該版本成立,說明數(shù)據(jù)已經(jīng)提交了。

③.trx_id>max_trx_id?不可以訪問該版本成立,說明該事務(wù)是在ReadView生成后才開啟。

④.min_trx_id<=trx_id<=max_trx_id?如果trx_id不在mids中是可以訪問該版本的成立,說明數(shù)據(jù)已經(jīng)提交。

readView(讀視圖)是快照讀SQL執(zhí)行時(shí)MVCC提取數(shù)據(jù)的依據(jù),記錄并維護(hù)系統(tǒng)當(dāng)前活躍的事務(wù)(未提交的)id。 Readview中包含了四個(gè)核心字段:

字段含義
m_ids當(dāng)前活躍的事務(wù)ID集合
min_trx_id最小活躍事務(wù)ID
max_trx_id預(yù)分配事務(wù)D,當(dāng)前最大事務(wù)D+1(因?yàn)槭聞?wù)D是自增的)
creator_trx_idReadView創(chuàng)建者的事務(wù)D

不同的隔離級別,生成ReadView的時(shí)機(jī)不同:

  • Read committed(讀已提交):在事務(wù)中每一次執(zhí)行快照讀時(shí)生成ReadView。
  • Repeatable Read(可重復(fù)讀) :僅在事務(wù)中第一次執(zhí)行快照讀時(shí)生成ReadView,后續(xù)復(fù)用該ReadView。

總結(jié)

MVCC機(jī)制的實(shí)現(xiàn)就是通過read-view機(jī)制與undo版本鏈比對機(jī)制,使得不同的事務(wù)會根據(jù)數(shù)據(jù)版本鏈對比規(guī)則讀取 同一條數(shù)據(jù)在版本鏈上的不同版本數(shù)據(jù)。

到此這篇關(guān)于深入理解Mysql中的MVCC的文章就介紹到這了,更多相關(guān)Mysql中的MVCC內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • ubuntu下磁盤空間不足導(dǎo)致mysql無法啟動的解決方法

    ubuntu下磁盤空間不足導(dǎo)致mysql無法啟動的解決方法

    昨天又遇到了MySQL數(shù)據(jù)庫無法重啟的問題,還以為是權(quán)限的原因,后來發(fā)現(xiàn)提示是因?yàn)榇疟P空間不足導(dǎo)致的,通過查找相關(guān)資料得以解決了,所以下面這篇文章主要介紹了ubuntu下磁盤空間不足導(dǎo)致mysql無法啟動的解決方法,需要的朋友可以參考下。
    2017-03-03
  • mysql 5.7.14 下載安裝、配置與使用詳細(xì)教程

    mysql 5.7.14 下載安裝、配置與使用詳細(xì)教程

    這篇文章主要介紹了mysql 5.7.14 下載安裝、配置與使用詳細(xì)教程的相關(guān)資料,非常不錯,具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09
  • MySQL表約束的實(shí)現(xiàn)

    MySQL表約束的實(shí)現(xiàn)

    本文主要介紹了MySQL表約束的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • SQL中字符串截取函數(shù)圖文教程

    SQL中字符串截取函數(shù)圖文教程

    在SQL的實(shí)際用途中,經(jīng)常會碰到需要對查詢結(jié)果值需要做字段的一些截取,下面這篇文章主要給大家介紹了關(guān)于SQL中字符串截取函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • MySQL復(fù)制三種模式:同步、異步、半同步復(fù)制有什么區(qū)別?

    MySQL復(fù)制三種模式:同步、異步、半同步復(fù)制有什么區(qū)別?

    作為數(shù)據(jù)庫領(lǐng)域的"快遞小哥",MySQL復(fù)制技術(shù)承擔(dān)著數(shù)據(jù)運(yùn)輸?shù)闹厝?今天我們就來聊聊這個(gè)數(shù)據(jù)世界的"快遞服務(wù)"——同步復(fù)制、異步復(fù)制、半同步復(fù)制到底有什么區(qū)別?為什么金融系統(tǒng)必須用半同步?電商大促時(shí)又該如何選擇?讓我們用最接地氣的方式揭開這些復(fù)制技術(shù)的神秘面紗
    2025-03-03
  • 詳解MySQL 查詢語句的執(zhí)行過程

    詳解MySQL 查詢語句的執(zhí)行過程

    這篇文章主要介紹了詳解MySQL 查詢語句的執(zhí)行過程,幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下
    2021-03-03
  • mysql刪除表數(shù)據(jù)如何恢復(fù)

    mysql刪除表數(shù)據(jù)如何恢復(fù)

    這篇文章主要介紹了mysql刪除表數(shù)據(jù)如何恢復(fù),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • MYSQL命令行模式管理MySql的一點(diǎn)心得

    MYSQL命令行模式管理MySql的一點(diǎn)心得

    MYSQL命令行模式管理MySql的一點(diǎn)心得...
    2007-09-09
  • Lost connection to MySQL server at ''reading authorization packet'', system error: 0

    Lost connection to MySQL server at ''reading authorization p

    這篇文章主要介紹了Lost connection to MySQL server at 'reading authorization packet', system error: 0錯誤解決方法,需要的朋友可以參考下
    2014-08-08
  • mysql-connector-java與Mysql、Java的對應(yīng)版本問題

    mysql-connector-java與Mysql、Java的對應(yīng)版本問題

    這篇文章主要介紹了mysql-connector-java與Mysql、Java的對應(yīng)版本問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11

最新評論