日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 锁机制 mvcc_轻松理解MYSQL MVCC 实现机制

發布時間:2025/4/5 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 锁机制 mvcc_轻松理解MYSQL MVCC 实现机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

輕松理解MYSQL MVCC 實現機制

輕松理解MYSQL MVCC 實現機制

#### 1. MVCC簡介

##### 1.1 什么是MVCC

MVCC是一種多版本并發控制機制。

##### 1.2 MVCC是為了解決什么問題?

大多數的MYSQL事務型存儲引擎,如,InnoDB,Falcon以及PBXT都不使用一種簡單的行鎖機制.事實上,他們都和MVCC–多版本并發控制來一起使用.

大家都應該知道,鎖機制可以控制并發操作,但是其系統開銷較大,而MVCC可以在大多數情況下代替行級鎖,使用MVCC,能降低其系統開銷.

##### 1.3 MVCC實現

MVCC是通過保存數據在某個時間點的快照來實現的. 不同存儲引擎的MVCC. 不同存儲引擎的MVCC實現是不同的,典型的有樂觀并發控制和悲觀并發控制.

#### 2.MVCC 具體實現分析

下面,我們通過InnoDB的MVCC實現來分析MVCC使怎樣進行并發控制的.

InnoDB的MVCC,是通過在每行記錄后面保存兩個隱藏的列來實現的,這兩個列,分別保存了這個行的創建時間,一個保存的是行的刪除時間。這里存儲的并不是實際的時間值,而是系統版本號(可以理解為事務的ID),沒開始一個新的事務,系統版本號就會自動遞增,事務開始時刻的系統版本號會作為事務的ID.下面看一下在REPEATABLE READ隔離級別下,MVCC具體是如何操作的.

##### 2.1簡單的小例子

create table yang(

id int primary key auto_increment,

name varchar(20));

假設系統的版本號從1開始.

INSERT

InnoDB為新插入的每一行保存當前系統版本號作為版本號.

第一個事務ID為1;

start transaction;

insert into yang values(NULL,'yang') ;

insert into yang values(NULL,'long');

insert into yang values(NULL,'fei');

commit;

對應在數據中的表如下(后面兩列是隱藏列,我們通過查詢語句并看不到)

|id|name|創建時間(事務ID)|刪除時間(事務ID)|

|-|-|-|-|

|1|yang|1|undefined|

|2|long|1|undefined|

|3|fei|1|undefined|

##### SELECT

InnoDB會根據以下兩個條件檢查每行記錄:

a.InnoDB只會查找版本早于當前事務版本的數據行(也就是,行的系統版本號小于或等于事務的系統版本號),這樣可以確保事務讀取的行,要么是在事務開始前已經存在的,要么是事務自身插入或者修改過的.

b.行的刪除版本要么未定義,要么大于當前事務版本號,這可以確保事務讀取到的行,在事務開始之前未被刪除.

只有a,b同時滿足的記錄,才能返回作為查詢結果.

總結

以上是生活随笔為你收集整理的mysql 锁机制 mvcc_轻松理解MYSQL MVCC 实现机制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。