亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Mysql MVCC多版本并發(fā)控制詳情

 更新時(shí)間:2022年04月28日 11:54:27   作者:? 請叫我黃同學(xué)?  ?  
這篇文章主要介紹了Mysql MVCC多版本并發(fā)控制詳情,MVCC是一種并發(fā)控制的方法,一般在數(shù)據(jù)庫管理系統(tǒng)中,實(shí)現(xiàn)對數(shù)據(jù)庫的并發(fā)訪問,在編程語言中實(shí)現(xiàn)事務(wù)內(nèi)存,下文更多相關(guān)介紹需要的小伙伴可以參考一下

1、MVCC

MVCC,全稱Multi-Version Concurrency Control,即多版本并發(fā)控制。MVCC是一種并發(fā)控制的方法,一般在數(shù)據(jù)庫管理系統(tǒng)中,實(shí)現(xiàn)對數(shù)據(jù)庫的并發(fā)訪問,在編程語言中實(shí)現(xiàn)事務(wù)內(nèi)存。

MVCC在MySQL InnoDB中的實(shí)現(xiàn)主要是為了提高數(shù)據(jù)庫并發(fā)性能,用更好的方式去處理讀寫沖突,做到即使有>讀寫沖突時(shí),也能做到不加鎖,非阻塞并發(fā)讀。

2、當(dāng)前讀

像select lock in share mode(共享鎖), select for update ; update, insert ,delete(排他鎖)這些操作都是一種當(dāng)前讀,為什么叫當(dāng)前讀?就是它讀取的是記錄的最新版本,讀取時(shí)還要保證其他并發(fā)事務(wù)不能修改當(dāng)前記錄,會對讀取的記錄進(jìn)行加鎖。

3、快照讀(提高數(shù)據(jù)庫的并發(fā)查詢能力)

像不加鎖的select操作就是快照讀,即不加鎖的非阻塞讀;快照讀的前提是隔離級別不是串行級別,串行級別下的快照讀會退化成當(dāng)前讀;之所以出現(xiàn)快照讀的情況,是基于提高并發(fā)性能的考慮,快照讀的實(shí)現(xiàn)是基于多版本并發(fā)控制,即MVCC,可以認(rèn)為MVCC是行鎖的一個(gè)變種,但它在很多情況下,避免了加鎖操作,降低了開銷;既然是基于多版本,即快照讀可能讀到的并不一定是數(shù)據(jù)的最新版本,而有可能是之前的歷史版本

4、當(dāng)前讀、快照讀、MVCC關(guān)系

MVCC多版本并發(fā)控制指的是維持一個(gè)數(shù)據(jù)的多個(gè)版本,使得讀寫操作沒有沖突,快照讀是MySQL為實(shí)現(xiàn)MVCC的一個(gè)非阻塞讀功能。MVCC模塊在MySQL中的具體實(shí)現(xiàn)是由三個(gè)隱式字段,undo日志、read view三個(gè)組件來實(shí)現(xiàn)的。

5、MVCC實(shí)現(xiàn)原理

mvcc的實(shí)現(xiàn)原理主要依賴于記錄中的三個(gè)隱藏字段,undolog,read view來實(shí)現(xiàn)的。

隱藏字段

行記錄除了我們自定義的字段外,還有數(shù)據(jù)庫隱式定義的DB_TRX_ID,DB_ROLL_PTR,DB_ROW_ID等字段

DB_TRX_ID

6字節(jié),最近修改事務(wù)id,記錄創(chuàng)建這條記錄或者最后一次修改該記錄的事務(wù)id

DB_ROLL_PTR

7字節(jié),回滾指針,指向這條記錄的上一個(gè)版本,用于配合undolog,指向上一個(gè)舊版本

DB_ROW_JD

6字節(jié),隱藏的主鍵,如果數(shù)據(jù)表沒有主鍵,那么innodb會自動生成一個(gè)6字節(jié)的row_id

undo log

undolog被稱之為回滾日志,表示在進(jìn)行insert,delete,update操作的時(shí)候產(chǎn)生的方便回滾的日志 當(dāng)進(jìn)行insert操作的時(shí)候,產(chǎn)生的undolog只在事務(wù)回滾的時(shí)候需要,并且在事務(wù)提交之后可以被立刻丟棄 當(dāng)進(jìn)行update和delete操作的時(shí)候,產(chǎn)生的undolog不僅僅在事務(wù)回滾的時(shí)候需要,在快照讀的時(shí)候也需要,所以不能隨便刪除,只有在快照讀或事務(wù)回滾不涉及該日志時(shí),對應(yīng)的日志才會被purge線程統(tǒng)一清除(當(dāng)數(shù)據(jù)發(fā)生更新和刪除操作的時(shí)候都只是設(shè)置一下老記錄的deleted_bit,并不是真正的將過時(shí)的記錄刪除,因?yàn)闉榱斯?jié)省磁盤空間,innodb有專門的purge線程來清除deleted_bit為true的記錄,如果某個(gè)記錄的deleted_id為true,并且DB_TRX_ID相對于purge線程的read view 可見,那么這條記錄一定時(shí)可以被清除的)

Read View

Read View是事務(wù)進(jìn)行快照讀操作的時(shí)候生產(chǎn)的讀視圖,在該事務(wù)執(zhí)行快照讀的那一刻,會生成一個(gè)數(shù)據(jù)系統(tǒng)當(dāng)前的快照,記錄并維護(hù)系統(tǒng)當(dāng)前活躍事務(wù)的id,事務(wù)的id值是遞增的。

6、MVCC核心思想

MVCC 的核心思想是: 我可以查到在我這個(gè)事務(wù)開始之前已經(jīng)存在的數(shù)據(jù),即使它在后面被修改或者刪除了。在我這個(gè)事務(wù)之后新增的數(shù)據(jù),我是查不到的。

MVCC查找規(guī)則:只能查找創(chuàng)建時(shí)間小于等于當(dāng)前事務(wù)ID的數(shù)據(jù)和刪除時(shí)間大于當(dāng)前事務(wù)ID的行(或未刪除)

如圖,在Transaction1事務(wù)中插入兩條數(shù)據(jù),并提交事務(wù),然后在Transaction2事務(wù)中讀取,讀取到兩條數(shù)據(jù)

如圖,在Transaction3事務(wù)中插入一條為老連的數(shù)據(jù),然后在Transaction2事務(wù)讀取,根據(jù)mvcc規(guī)則,不能查到在我的事務(wù)開始之后插入插入的數(shù)據(jù),老連的創(chuàng)建ID大于2,所以只能查到兩條數(shù)據(jù)

如圖,在Transaction4事務(wù)中刪除id為2的數(shù)據(jù),然后在Transaction2事務(wù)讀取,根據(jù)mvcc規(guī)則,可以查到在我的事務(wù)開始之后插刪除的數(shù)據(jù),老晁還是可以查出來所以還是查到兩條數(shù)據(jù)

如圖,在Transaction5事務(wù)中下,添加一條name=濤哥的數(shù)據(jù),刪除id=1數(shù)據(jù),修改name=濤哥的id為1,然后在Transaction2事務(wù)讀取,根據(jù)mvcc規(guī)則,可以查到在我的事務(wù)開始之后插刪除的數(shù)據(jù),老嚴(yán)還是可以查出來,所以還是查到兩條數(shù)據(jù)

通過以上演示我們能看到,通過版本號的控制,無論其他事務(wù)是插入、修改、刪除,Transaction2事務(wù)查詢到的數(shù)據(jù)都沒有變化。

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

相關(guān)文章

  • mysql字符串拼接并設(shè)置null值的實(shí)例方法

    mysql字符串拼接并設(shè)置null值的實(shí)例方法

    在本文中小編給大家整理的是關(guān)于mysql 字符串拼接+設(shè)置null值的實(shí)例內(nèi)容以及具體方法,需要的朋友們可以學(xué)習(xí)下。
    2019-09-09
  • mysql登錄遇到ERROR 1045問題解決方法

    mysql登錄遇到ERROR 1045問題解決方法

    mysql登錄時(shí)出現(xiàn)了錯(cuò)誤:ERROR 1045: Access denied for user,究竟是什么原因呢?接下來為你詳細(xì)介紹下,感興趣的你可以參考下哈,或許可以幫助到你
    2013-03-03
  • Mysql錯(cuò)誤Every derived table must have its own alias解決方法

    Mysql錯(cuò)誤Every derived table must have its own alias解決方法

    這篇文章主要介紹了Mysql錯(cuò)誤Every derived table must have its own alias解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • MySql索引和事務(wù)定義到使用全面涵蓋

    MySql索引和事務(wù)定義到使用全面涵蓋

    這篇文章主要介紹了MySQL數(shù)據(jù)庫索引事務(wù),索引是為了加速對表中數(shù)據(jù)行的檢索而創(chuàng)建的一種分散的存儲結(jié);事物是屬于計(jì)算機(jī)中一個(gè)很廣泛的概念,一般是指要做的或所做的事情,下面我們就一起進(jìn)入文章了解具體內(nèi)容吧
    2022-07-07
  • MySQL數(shù)據(jù)庫所在服務(wù)器磁盤滿了的故障分析和解決方法

    MySQL數(shù)據(jù)庫所在服務(wù)器磁盤滿了的故障分析和解決方法

    這篇文章主要給大家介紹了MySQL數(shù)據(jù)庫所在服務(wù)器磁盤滿了的故障分析和解決方法,文中通過代碼示例給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-02-02
  • MySQL性能優(yōu)化之table_cache配置參數(shù)淺析

    MySQL性能優(yōu)化之table_cache配置參數(shù)淺析

    這篇文章主要介紹了MySQL性能優(yōu)化之table_cache配置參數(shù)淺析,本文介紹了它的緩存機(jī)制、參數(shù)優(yōu)化及清空緩存的命令等,需要的朋友可以參考下
    2014-07-07
  • Windows下MySQL下載與安裝、配置與使用教程

    Windows下MySQL下載與安裝、配置與使用教程

    這篇文章主要為大家詳細(xì)介紹了Windows下MySQL下載與安裝、配置與使用教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • MySQL如何改變表的存儲引擎方式

    MySQL如何改變表的存儲引擎方式

    這篇文章主要介紹了MySQL如何改變表的存儲引擎方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • mysql-8.0.17-winx64 部署方法

    mysql-8.0.17-winx64 部署方法

    這篇文章主要介紹了mysql-8.0.17-winx64 部署方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • mysql字符集亂碼問題解決方法介紹

    mysql字符集亂碼問題解決方法介紹

    解決亂碼的方法是,在執(zhí)行SQL語句之前,將MySQL以下三個(gè)系統(tǒng)參數(shù)設(shè)置為與服務(wù)器字符集character-set-server相同的字符集
    2012-05-05

最新評論