MYSQL從Recordlock到Next-KeyLocks到GAP_LOCK的示例分析

本篇文章給大家分享的是有關MySQL 從Record lock 到 Next-Key Locks 到 GAP_LOCK的示例分析,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名與空間、網頁空間、營銷軟件、網站建設、恩平網站維護、網站推廣。

大多數人第一次提到鎖,可能認為鎖可能是針對磁盤上的物理的數據記錄,實際上,所有的操作都在內存中完成,鎖怎么可能是針對磁盤上的物理數據呢? 

在認識到鎖都是在內存中產生的后,鎖是在什么范圍,怎么進行的鎖,等等就是進一步需要了解的。

MySQL 中有以下幾種鎖, Record lock, Gap lock, Next-key lock.

Record lock是基于索引記錄的,也就是他上鎖的目標不是記錄本身而是索引。那有人就提出異議了,我不建索引,我沒有主鍵,我沒有聚簇索引,你奈我何。

你怎么枷鎖我,實際上MYSQL的在你不做任何以上的工作時,MYSQL 會無奈的給你一個,A hidden Clustered index, (所以,建MYSQL 不自己建立聚簇索引,屬于對MYSQL 耍流氓的行為) ,所以我看見MYSQL不建立主鍵,并且用UUID的行為我對此是 “極度的遺憾”。

Next-key lock這個東西默認是在你MYSQL 在 REPEATABLE READ 模式下,防止你幻讀的。具體Next-key lock 使用對INDEX 行鎖進行GAY LOCKING. 

那為什么要特意搞清楚 NEXT-KEY LOCK ,原文檔有這樣一句話,他說一個 next-key lock 就是一個索引記錄鎖加上一個GAP 鎖, 如果一個session擁有了 S or  X 鎖(這里我們先不考慮 IX IS),其他的Session 將不能插入一個新的INDEX RECORD 在間隙鎖INDEX 記錄之前的位置。

估計說完這句話,more people will be dizziness.

舉個例子,我們有以下索引值 id 10,11,13,20

用索引值來表達的  (負無限,10】(10,11】 (11,13】 (13,20】 (20,正無限)

官方文檔下面就跟著一句話,NEXT-KEY LOCK 將鎖定索引最大值的間隙,In effect, this next-key lock locks only the gap following the        largest index value.  這意味這什么,請打開你的腦洞,這樣的操作會對插入有什么影響。

Gap lock  首先 Gap lock只存在于 repeatable read isolation level,在這個level 里面Gap lock才存在。

我們繼續上面的那個10,11,13,20的例子,

下面有三個 session 同時運行

Session A 

update table set m=m+3 where id =14;

Session B

insert into table (id) values (16);

Session C

insert into table (id) values (21);

則結果 session B 插入數據會失敗,因為GAP LOCK 將(13,20】 這一段的索引值都鎖上了,不允許在這之間進行數據的插入。

而 Session C 則可以直接插入數據,因為到了20時,值是閉合的。

所以在MYSQL的isolation 選擇中,如果你選擇了repeatable read, 就意味著你的MYSQL 更要付出更多的心思在語句的設計上,稍不留意,你的MYSQL 就只能不斷了報 BLOCK 的錯誤。

我們在舉一個例子

 Session A  

select * from table where id > 10 and id < 20 for update;

Session B

 Insert into table (id) varlues (14);

Session C

 insert into table (id) values (21);

這里的結果是  Session B and Session C  都會失敗。

原因是next-key lock 范圍鎖。

使用 repeatable isolation 的MYSQL 會遇到更多的鎖和BLOCK的問題,所以這里建議,MYSQL 不要使用 repeatable isolation ,同時唯一索引在MYSQL 中的性能其實也還值得深究,(其實有些大表在處理唯一索引的時候也是如履薄冰,有坑)

我們最后在來一個死鎖的案例

session A 

begin

select id from table where id = 20 in share mode; (+S)

insert into table (id) values (15)

end

session B

update table set column = column +1 where id = 20;

這樣直接session b 會死鎖。

這就是repeatable isolation 下的MYSQL NEXT-KEY LOCK & GAP LOCK 會遇到的問題。所以........  我就不多說了。

以上就是MYSQL 從Record lock 到 Next-Key Locks 到 GAP_LOCK的示例分析,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注創新互聯行業資訊頻道。

文章題目:MYSQL從Recordlock到Next-KeyLocks到GAP_LOCK的示例分析
網頁地址:http://m.kartarina.com/article38/gesgsp.html

成都網站建設公司_創新互聯,為您提供全網營銷推廣App設計品牌網站建設ChatGPT網站改版營銷型網站建設

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都app開發公司
主站蜘蛛池模板: 日韩精品无码免费专区午夜| 加勒比无码一区二区三区| 亚洲中文字幕无码久久2017| 人妻系列AV无码专区| 中文午夜乱理片无码| 白嫩少妇激情无码| 免费看成人AA片无码视频吃奶| 日韩人妻无码中文字幕视频| 国产精品白浆无码流出| 无码人妻精品一区二区三区东京热| 亚洲AV永久无码精品放毛片| 免费无码作爱视频| 国产精品无码亚洲精品2021| 国产精品无码成人午夜电影| 国产精品爆乳奶水无码视频| 精品爆乳一区二区三区无码av| 狠狠躁天天躁无码中文字幕| 人妻在线无码一区二区三区| 精品无码一区二区三区亚洲桃色| 国产精品一区二区久久精品无码 | 精品无码国产污污污免费网站国产 | 久久午夜无码鲁丝片午夜精品| 亚洲av无码不卡一区二区三区| 五月婷婷无码观看| 精品一区二区三区无码免费直播| 精品爆乳一区二区三区无码av| 无码AV中文字幕久久专区| 国产成A人亚洲精V品无码性色 | 亚洲av日韩av高潮潮喷无码| 国产成人无码a区在线视频| 国产精品亚洲а∨无码播放不卡| 亚洲私人无码综合久久网| 无码福利写真片视频在线播放| 人妻精品久久无码专区精东影业| 亚洲AV无码乱码国产麻豆| 无码AV片在线观看免费| 亚洲国产超清无码专区| 精品一区二区三区无码免费视频 | 精品久久久久久久无码久中文字幕| 中文字幕亚洲精品无码| 中文字幕无码免费久久99|