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

MySQL中MVCC機(jī)制的實(shí)現(xiàn)原理

 更新時(shí)間:2022年08月10日 09:44:48   作者:亞雷  
這篇文章主要介紹了MySQL中MVCC機(jī)制的實(shí)現(xiàn)原理,MVCC多版本并發(fā)控制,MySQL中一種并發(fā)控制的方法,他主要是為了提高數(shù)據(jù)庫的讀寫性能,用更好的方式去處理讀寫沖突

前言

MVCC全稱為Multi Version Concurrency Control,直譯為多版本并發(fā)控制,是MySQL中一種并發(fā)控制的方法,他主要是為了提高數(shù)據(jù)庫的讀寫性能,用更好的方式去處理讀寫沖突。

什么是當(dāng)前讀和快照讀?

在講述MVCC機(jī)制實(shí)現(xiàn)原理之前,我們先了解一下當(dāng)前讀和快照讀

當(dāng)前讀:

其實(shí)也很容易理解,當(dāng)前讀指的就是讀取的是最新的記錄,讀取的時(shí)候還需要保證其他事務(wù)不能修改當(dāng)前記錄,所以會對讀取的記錄進(jìn)行加鎖處理

例如:select for update 、update、insert、delete這些操作都是當(dāng)前讀

快照讀:

而快照讀也就是不加鎖的select,不過需要注意的是快照讀的前提是隔離級別不能是serializable(可串行化),之所以出現(xiàn)快照讀,是基于提高并發(fā)性能的考慮

其實(shí)可以簡單理解成MVCC就是為了實(shí)現(xiàn)讀寫沖突的時(shí)候不去加鎖

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

其實(shí)在MySQL中每一條記錄都會有一些隱藏字段,而在MVCC機(jī)制中,用處最大的就是trx_id,roll_pointer分別代表著操作這條記錄的事務(wù)的事務(wù)ID,和回滾指針(指向當(dāng)前記錄行的undo log信息),倘若這條記錄沒有主鍵,還包含一個(gè)隱含的主鍵ID

在每一個(gè)事務(wù)開啟之前,都會先從數(shù)據(jù)庫中拿到一個(gè)自增的事務(wù)ID

對于undo log很明顯這就是一個(gè)日志文件,記錄著insert、update、delete,我們在進(jìn)行刪除的時(shí)候,其實(shí)innodb引擎并沒有真正的刪除,其實(shí)是將一個(gè)記錄的一個(gè)隱含字段修改了,讓我們?nèi)ニ阉鞯臅r(shí)候搜索不到,所以我們可以知道在undo log中只存在兩種日志,一種是insert undo log,一種是update undo log

undo log的作用就是為了保存版本鏈,而前面我們說的roll_pointer這個(gè)字段就是指向的這里

為了保證可見性,當(dāng)事務(wù)發(fā)起快照讀的時(shí)候,就會產(chǎn)生一個(gè)Read View(讀視圖),Read View 保存了當(dāng)前事務(wù)開啟時(shí)所有活躍的事務(wù)列表,或者可以理解為保存了其他事務(wù)的ID列表

Read View有幾個(gè)重要屬性:

  • trx_ids:當(dāng)前系統(tǒng)中活躍的事務(wù)ID
  • low_limit_id:目前出現(xiàn)的最大的事務(wù)ID+1,也就是下一個(gè)將被分配的事務(wù)ID
  • up_limit_id:活躍事務(wù)列表中最小的id
  • creator_trx_id:當(dāng)前事務(wù)的ID

而對于Read View的可見性規(guī)則:

  • 如果訪問版本事務(wù)id = creator_trx_id 那么證明該事務(wù)操作的就是自己修改過的記錄
  • 如果訪問版本事務(wù)id < up_limit_id 那么證明生成該版本的事務(wù)已經(jīng)提交
  • 如果訪問版本事務(wù)id > low_limit_id,那么表示生成該版本的事務(wù)還沒有提交不能被訪問
  • 如果訪問版本事務(wù)id > up_limit_id 且 id < low_limit_id,那么判斷該事務(wù)id是否在活躍列表中,如果在證明還未提交不能被訪問,反之亦然

到此這篇關(guān)于MySQL中MVCC機(jī)制的實(shí)現(xiàn)原理的文章就介紹到這了,更多相關(guān)MySQL MVCC機(jī)制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL5.6下windows msi安裝詳細(xì)介紹

    MySQL5.6下windows msi安裝詳細(xì)介紹

    這篇文章主要介紹了MySQL5.6下windows msi安裝詳細(xì)介紹,介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-08-08
  • MySQL5.7完全卸載步驟詳解

    MySQL5.7完全卸載步驟詳解

    這篇文章主要介紹了MySQL5.7完全卸載的詳細(xì)步驟以及把中間遇到的問題做了分析,需要的朋友跟著操作下吧。
    2018-02-02
  • mysql 臨時(shí)表 cann''t reopen解決方案

    mysql 臨時(shí)表 cann''t reopen解決方案

    MySql關(guān)于臨時(shí)表cann't reopen的問題,本文將提供詳細(xì)的解決方案,需要了解的朋友可以參考下
    2012-11-11
  • SQL?ALTER?TABLE語句靈活修改表結(jié)構(gòu)和數(shù)據(jù)類型

    SQL?ALTER?TABLE語句靈活修改表結(jié)構(gòu)和數(shù)據(jù)類型

    這篇文章主要介紹了SQL?ALTER?TABLE語句靈活修改表結(jié)構(gòu)和數(shù)據(jù)類型,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • MySQL json相關(guān)函數(shù)及功能詳解

    MySQL json相關(guān)函數(shù)及功能詳解

    MySQL提供了一系列的JSON函數(shù),用于解析、提取、修改和操作JSON數(shù)據(jù),以下是一些常用的JSON函數(shù)及其功能,需要的朋友可以參考下
    2023-11-11
  • mysql不重啟的情況下修改參數(shù)變量

    mysql不重啟的情況下修改參數(shù)變量

    這篇文章主要介紹了mysql不重啟的情況下修改參數(shù)變量,需要的朋友可以參考下
    2014-06-06
  • 解決MySQL 5.7中定位DDL被阻塞的問題

    解決MySQL 5.7中定位DDL被阻塞的問題

    這篇文章主要介紹了MySQL 5.7中如何定位DDL被阻塞的問題,在MySQL 5.7中,針對MDL,引入了一張新表performance_schema.metadata_locks,該表可對外展示MDL的相關(guān)信息,包括其作用對象,類型及持有等待情況。對此問題感興趣的朋友參考下本文
    2018-08-08
  • 解析MySQL中mysqldump工具的基本用法

    解析MySQL中mysqldump工具的基本用法

    本篇文章是對MySQL中mysqldump工具的基本用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • mysql 8.0.17 安裝圖文教程

    mysql 8.0.17 安裝圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql 8.0.17 安裝配置方法圖文教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Xtrabackup使用指南 InnoDB數(shù)據(jù)備份工具

    Xtrabackup使用指南 InnoDB數(shù)據(jù)備份工具

    Xtrabackup是一個(gè)對InnoDB做數(shù)據(jù)備份的工具,支持在線熱備份(備份時(shí)不影響數(shù)據(jù)讀寫),是商業(yè)備份工具InnoDB Hotbackup的一個(gè)很好的替代品
    2011-10-10

最新評論