日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

說說MySQL中MVCC機制的原理

瀏覽:287日期:2023-05-05 10:12:08
目錄
  • 一、概述:
  • 二、什么是Undo log
  • 三、行的隱藏列
  • 四、Undo log版本鏈
  • 五、關于ReadView
    • ReadView包含以下幾個重要的參數:

一、概述:

了解了MySql的底層架構后,我們今天要深入了解下什么是MVCC。

MVCC,全稱Multi-Version Concurrency Control,即多版本并發控制。MVCC是一種多并發控制的方法,一般在數據庫管理系統中,實現對數據庫的并發訪問,在編程語言中實現事務內存。
我們知道,MySql在5.5后由MyISAM存儲引擎改成了InnoDB存儲引擎,主要是因為InnoDB是支持事務的,那么當多線程同時執行的時候,可能會出現并發問題。這個時候可能會出現一個能夠控制并發的方法,MVCC就起到了這個作用。

MVCC主要靠undo log版本鏈與ReadView來實現。

二、什么是Undo log

  • Undo log主要用于事務回滾時恢復原來的數據。
  • mysql在執行sql時,會將一天邏輯相反的日志保存到undo log中。因此,undo log中記錄的也是邏輯日志。
  • 但mysql執行Insert語句時,會在undo log日志中記錄本次插入的主鍵id。等事務回滾時,delete刪除此id。
  • 當MySQL執行update語句時,會在undo log中保存修改前的數據。等事務回滾時,再執行一次update,得到原來的數據。
  • 當MySQL執行delete語句時,會在undo log中保存刪除前的數據。等事務回滾時,再執行insert,插入原來的數據。
  • 數據庫中的四大特性–原子性,即事務是不可分割的,要么全部成功,要不全部失敗,其底層就靠undo log來實現。在執行某一條語句失敗時,就會對之前事務的語句進行回滾。

三、行的隱藏列

  • 在數據庫的每行上,除了存放真實的數據以外,還存在3個隱藏的列:row_id、trx_id和roll_pointer
  • row_id,行號:

如果當前表有整數類型的主鍵,那么row_id的值就是主鍵的值
如果沒有整數類型的主鍵,則MySQL會按照字段的順序選擇一個非空的整數類型的唯一索引為row_id
如果都沒有找到,則會創建一個自動增長的整數作為row_id

  • trx_id,事務號:

當一個事務開始執行前,MySQL就會為這個事務分配一個全局自增的事務id。
之后該事務對當前進行的增、改、刪除等操作時,都會將自己的事務ID記錄到trx_id中。

  • roll_pointer,回滾指針:

事務對當前數據改動時,會將舊的數據記錄到undo log中,在將數據寫入當前行,且當前的roll_pointer指向剛才那個undo log,因此可通過roll_pointer來找到改行前一個版本。
當一直有事務對該行改動時,就會一直生成undo log,最終將會形成undo log版本鏈。

四、Undo log版本鏈

一開始,我們使用以下語句創建一個stduent表

CREATE TABLE `student` (	`id` INT ( 11 ) NOT NULL AUTO_INCREMENT,	`name` VARCHAR ( 255 ) NOT NULL,	`age` INT ( 11 ) NOT NULL,  PRIMARY KEY ( `id` ) USING BTREE ) ENGINE = INNODB;

現在開啟第一個事務,事務id為1,執行以下插入語句。

INSERT INTO student VALUES ( 1, "a", 24 );

那么當前的示意圖如下:

因為該數據是新插入的,因此它的roll_pointer指向的undo log為空。

接著開啟第2個事務,分配的事務id是2,執行以下修改命令。

UPDATE student SET NAME = "b" WHERE id = 1;

現在的示意圖變為:

當開啟第3個事務,分配到事務id是3,執行以下修改命令。

UPDATE student SET age = 25 WHERE id = 1;

示意圖變為:

每個事務對該行進行改動時,都會生成一個undo log,用于保存之前的版本,之后再將新版本的roll_pointer指向剛才生成的undo log。
因此,roll_pointer可以將這些不同版本的undo log串聯起來,形成undo log的版本鏈。

五、關于ReadView

首先需要理解一下快照讀與當前讀
快照讀:簡單的select查詢,即不包括 select … lock in share mode, select … for update,可能會讀到數據的歷史版本。
當前讀:以下語句都是當前讀,總是讀取最新版本,會對讀取的最新版本加鎖。

select ... lock in share modeselect ... for updateinsertupdatedelete

在事務執行每一個快照讀或事務初次執行快照讀時,會生成一致性視圖,即ReadView。
ReadView的作用是,判斷undo log版本鏈中的哪些數據對當前事務可見。

ReadView包含以下幾個重要的參數:

  • m_ids
    • 在創建ReadView的那一刻,mysql中所有未提交的事務id集合。
  • min_trx_id
    • m_ids中的最小值
  • max_trx_id
    • mysql即將為下一個事務分配的事務id,并不是m_ids中的最大值。
  • creator_trx_id
    • 即創建此ReadView的事務id

簡要的示意圖如下:

那么事務在執行快照讀時,可以通過以下的規則來確定undo log版本鏈上的哪個版本數據可見。

  • 如果當前undo log的版本的trx_id<min_trx_id,說明該版本對應的事務在生成ReadView之前就已經提交了,因此是可見的。
  • 如果當前undo log的版本的trx_id≥max_trx_id,說明該版本對應的事務在生成ReadView之后才開始的,因此是不可見的。
  • 如果當前undo log的版本的trx_id∈[min_trx_id,max_trx_id),如果在這個范圍里,還要判斷trx_id是否在m_ids中:
  在m_ids中,說明版本對應的事務未提交,因此是不可見的。  不在m_ids中,說明版本對應的事務已經提交,因此是可見的。
  • 如果當前undo log的版本的trx_id=creator_trxt_id,說明事務正在訪問自己修改的數據,因此是可見的。
  • 當undo log版本鏈表的頭結點數據被判定為不可見時,則利用roll_pointer找到上一個版本,再進行判斷。如果整個鏈表中都沒有找到可見的數據,則代表當前的查詢找不到數據。

到此這篇關于說說MySQL中MVCC機制的原理的文章就介紹到這了,更多相關MySQLMVCC機制內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: MySQL
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩成人在线看| 亚洲网站视频| 韩国精品主播一区二区在线观看| 视频一区二区不卡| 91一区二区三区四区| 日本精品不卡| 国产精品一区二区三区美女 | 欧美特黄视频| 色婷婷综合网| 欧美极品中文字幕| 亚洲精品动态| 日韩专区一卡二卡| 日韩午夜电影| 一区二区三区国产在线| 欧美在线亚洲综合一区| 超碰在线99| 日韩三区免费| 日韩精品欧美激情一区二区| 9999国产精品| 91亚洲国产| 91日韩在线| 播放一区二区| 图片区亚洲欧美小说区| 99xxxx成人网| 久久电影一区| 国产免费成人| 亚洲综合精品| 日韩一区二区三区精品视频第3页 日韩一区二区三区免费视频 | 91亚洲国产| 国产盗摄——sm在线视频| 日韩精品麻豆| 亚洲国产一区二区三区在线播放| 九色porny丨国产首页在线| 国产a亚洲精品| 欧美a级片一区| 四虎精品永久免费| 国产调教精品| 久久精品高清| 日韩毛片在线| 日本v片在线高清不卡在线观看| 国产精品亲子伦av一区二区三区| 免费在线日韩av| 韩日一区二区| 蜜臀久久99精品久久久久宅男| 欧美精品1区| 免费成人网www| 久久精品72免费观看| 久久激情一区| 国产毛片精品| 激情综合网址| 麻豆91精品视频| 丝袜美腿亚洲一区二区图片| 日本va欧美va精品| 秋霞影视一区二区三区| 日本午夜精品久久久久| 国产在线|日韩| 欧美久久亚洲| 亚洲一区欧美| 天堂网在线观看国产精品| 中文字幕av亚洲精品一部二部| 高清av不卡| 日韩高清在线观看一区二区| 久久亚洲国产| 日韩高清欧美| 国产精品115| 日韩国产一二三区| 婷婷综合网站| 97国产精品| 国产精品毛片久久久| 亚洲不卡视频| 欧美一区=区| 免费欧美一区| 福利精品一区| 国产精品日韩精品在线播放| 日本欧美在线| 91精品丝袜国产高跟在线| 日韩中文字幕麻豆| 在线精品视频在线观看高清| 亚洲高清激情| 精品一区三区| 久久av在线| 亚洲一级大片| 久久国产99| 男人的天堂久久精品| 亚洲一区二区三区高清| 国产一区白浆| 在线一区二区三区视频| 日本中文字幕不卡| 国产欧美日韩视频在线| 精品国产乱码久久久久久1区2匹 | 日韩毛片网站| 日韩制服丝袜av| 亚洲永久精品唐人导航网址| 久久国产精品毛片| 婷婷综合福利| 国产欧美69| 国产欧美日韩| 精品视频一二| 国产一区调教| 亚洲成人不卡| 日本欧美在线看| 国产探花一区在线观看| 久久久久久夜| 亚洲欧美成人综合| 欧美日韩99| 国产黄大片在线观看| 亚洲二区免费| 国产视频一区二区在线播放| 日韩国产欧美| 色狠狠一区二区三区| 日本一区二区高清不卡| 国产91久久精品一区二区| 亚洲欧美日韩在线观看a三区| 日韩在线电影| 久久精品123| 国产美女亚洲精品7777| 中文字幕在线看片| 亚洲人妖在线| 亚洲成人va| 国产精品视频3p| 在线亚洲精品| 国产成人黄色| 日本不卡一区二区三区| 女生影院久久| 久久婷婷国产| 色综合视频一区二区三区日韩| 婷婷激情一区| 日韩国产在线观看一区| 黄页网站一区| 欧美aa一级| 国产在线不卡| 神马午夜久久| 97在线精品| 美女久久久精品| 国产日韩亚洲| 亚洲毛片一区| 亚洲精品一二| 日韩1区2区3区| 日韩一区中文| 亚洲精品黄色| 亚洲精品在线观看91| 成人污污视频| 日韩和欧美一区二区| 在线精品观看| 亚洲女同中文字幕| 中文不卡在线| 久久先锋影音| 国产视频欧美| 国产精品7m凸凹视频分类| 涩涩av在线| 欧美日韩在线网站| 欧美粗暴jizz性欧美20| 欧美日韩激情在线一区二区三区| 久久人人99| 在线日韩欧美| 蜜臀91精品一区二区三区| 亚洲一区二区三区免费在线观看| 日韩视频在线一区二区三区| 午夜在线视频观看日韩17c| 国产99久久| 欧美综合国产| 国产欧美三级| 你懂的国产精品永久在线| 四虎成人av| 久久先锋影音| 日本视频一区二区| 日韩av免费大片| 樱桃成人精品视频在线播放| 亚洲男女自偷自拍| 国产精品欧美三级在线观看| 精品午夜久久| 久久国产免费| 在线国产一区二区| 久热精品在线| 精品一区视频| 99在线精品免费视频九九视| 久久狠狠亚洲综合| 播放一区二区| 日韩精品三级| 亚洲五月综合| 综合激情一区| 视频一区二区中文字幕| 伊人影院久久| 欧美精品三级在线| 日本高清不卡一区二区三区视频| 国产日本久久| 麻豆精品在线| 午夜欧美精品| 日本不卡中文字幕| 久久99影视| 在线亚洲观看| 国内不卡的一区二区三区中文字幕| 日韩精品视频在线看| 久久av网站| 99视频+国产日韩欧美| 免费视频一区二区三区在线观看 | 爽好多水快深点欧美视频| 亚洲伊人影院| 久久久国产精品网站| 日本高清不卡一区二区三区视频|