午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > 淺談MySQL next-key lock 加鎖范圍

淺談MySQL next-key lock 加鎖范圍

熱門標簽:html地圖標注并導航 催天下外呼系統 北京金倫外呼系統 武漢電銷機器人電話 400電話辦理服務價格最實惠 大豐地圖標注app 呂梁外呼系統 南太平洋地圖標注 400電話變更申請

前言

某天,突然被問到 MySQL 的 next-key lock,我瞬間的反應就是:

這都是啥啥啥???

這一個截圖我啥也看不出來呀?

仔細一看,好像似曾相識,這不是《MySQL 45 講》里面的內容么?

什么是 next-key lock

A next-key lock is a combination of a record lock on the index record and a gap lock on the gap before the index record.

官網的解釋大概意思就是:next-key 鎖是索引記錄上的記錄鎖和索引記錄之前的間隙上的間隙鎖的組合。

先給自己來一串小問號???

  • 在主鍵、唯一索引、普通索引以及普通字段上加鎖,是鎖住了哪些索引?
  • 不同的查詢條件,分別鎖住了哪些范圍的數據?
  • for share 和 for update 等值查詢和范圍查詢的鎖范圍?
  • 當查詢的等值不存在時,鎖范圍是什么?
  • 當查詢條件分別是主鍵、唯一索引、普通索引時有什么區別?

既然啥都不懂,那只好從頭開始操作實踐一把了!

先看看看 《MySQL 45 講》中丁奇老師的結論:

看了這結論,應該可以解答一大部分問題,不過有一句非常非常重點的話需要關注:MySQL 后面的版本可能會改變加鎖策略,所以這個規則只限于截止到現在的最新版本,即 5.x 系列=5.7.24,8.0 系列 =8.0.13

所以,以上的規則,對現在的版本并不一定適用,下面我以 MySQL 8.0.25 版本為例,進行多角度驗證 next-key lock 加鎖范圍。

環境準備

MySQL 版本:8.0.25

隔離級別:可重復讀(RR)

存儲引擎:InnoDB

mysql> select @@global.transaction_isolation,@@transaction_isolation\G
mysql> show create table t\G

如何使用 Docker 安裝 MySQL,可以參考另一篇文章《使用 Docker 安裝并連接 MySQL》

主鍵索引

首先來驗證主鍵索引的 next-key lock 的范圍

此時數據庫的數據如圖所示,對主鍵索引來說此時數據間隙如下:

主鍵等值查詢 —— 數據存在

mysql> begin; select * from t where id = 10 for update;

這條 SQL,對 id = 10 進行加鎖,可以先思考一下加了什么鎖?鎖住了什么數據?

可以通過 data_locks 查看鎖信息,SQL 如下:

# mysql> select * from performance_schema.data_locks;
mysql> select * from performance_schema.data_locks\G

具體字段含義可以參考 官方文檔

結果主要包含引擎、庫、表等信息,咱們需要重點關注以下幾個字段:

  • INDEX_NAME:鎖定索引的名稱
  • LOCK_TYPE:鎖的類型,對于 InnoDB,允許的值為 RECORD 行級鎖 和 TABLE 表級鎖。
  • LOCK_MODE:鎖的類型:S, X, IS, IX, and gap locks
  • LOCK_DATA:鎖關聯的數據,對于 InnoDB,當 LOCK_TYPE 是 RECORD(行鎖),則顯示值。當鎖在主鍵索引上時,則值是鎖定記錄的主鍵值。當鎖是在輔助索引上時,則顯示輔助索引的值,并附加上主鍵值。

結果很明顯,這里是對表添加了一個 IX 鎖 并對主鍵索引 id = 10 的記錄,添加了一個 X,REC_NOT_GAP 鎖,表示只鎖定了記錄。

同樣 for share 是對表添加了一個 IS 鎖并對主鍵索引 id = 10 的記錄,添加了一個 S 鎖。

可以得出結論:

對主鍵等值加鎖,且值存在時,會對表添加意向鎖,同時會對主鍵索引添加行鎖。

主鍵等值查詢 —— 數據不存在

mysql> select * from t where id = 11 for update;

如果是數據不存在的時候,會加什么鎖呢?鎖的范圍又是什么?

在驗證之前,分析一下數據的間隙。

  • id = 11 是肯定不存在的。但是加了 for update,這時需要加 next-key lock,id = 11 所屬區間為 (10,15] 的前開后閉區間;
  • 因為是等值查詢,不需要鎖 id = 15 那條記錄,next-key lock 會退化為間隙鎖;
  • 最終區間為 (10,15) 的前開后開區間。

使用 data_locks 分析一下鎖信息:

看下鎖的信息 X,GAP 表示加了間隙鎖,其中 LOCK_DATA = 15,表示鎖的是 主鍵索引 id = 15 之前的間隙。

此時在另一個 Session 執行 SQL,答案顯而易見,是 id = 12 不可以插入,而 id = 15 是可以更新的。

可以得出結論,在數據不存在時,主鍵等值查詢,會鎖住該主鍵查詢條件所在的間隙。

主鍵范圍查詢(重點)

mysql> begin; select * from t where id >= 10 and id  11 for update;

根據 《MySQL 45 講》分析得出下面結果:

  • id >= 10 定位到 10 所在的區間 (10,+∞);
  • 因為是 >= 存在等值判斷,所以需要包含 10 這個值,變為 [10,+∞) 前閉后閉區間;
  • id 11 限定后續范圍,則根據 11 判斷下一個區間為 15 的前開后閉區間;
  • 結合起來則是 [10,15]。(不完全正確)

先看下 data_locks

可以看到除了表鎖之外,還有 id = 10 的行鎖(X,REC_NOT_GAP)以及主鍵索引 id = 15 之前的間隙鎖(X,GAP)。

所以實際上 id = 15 是可以進行更新的。也就是說前開后閉區間出現了問題,個人認為應該是 id 11 這個條件判斷,導致不需要進行了鎖 15 這個行鎖。

結果驗證也是正確的,id = 12 插入阻塞,id = 15 更新成功。

當范圍的右側是包含等值查詢呢?

mysql> begin; select * from t where id > 10 and id = 15 for update;

來分析一下這個 SQL:

id > 10 定位到 10 所在的區間 (10,+∞);id = 15 定位是 (-∞, 15];結合起來則是 (10,15]。

同樣先看一下 data_locks

可以看出只添加了一個主鍵索引 id = 15 的 X 鎖。

驗證下 id = 15 是否可以更新?再驗證 id = 16 是否可以插入?

事實證明是沒有問題的!

當然,這里有小伙伴會說,在 《MySQL 45 講》 里面說這里有一個 bug,會鎖住下一個 next-key。

事實證明,這個 bug 已經被修復了。修復版本為 MySQL 8.0.18。但是并沒有完全修復!!!

參考鏈接地址:

https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-18.html

搜索關鍵字:Bug #29508068)

咱們可以分別用 8.0.17 進行復現一下:

在 8.0.17 中 id = 15 會將 id = 20 這條數據也鎖著,而在 8.0.25 版本中則不會。所以這個 bug 是被修復了的。

再來看下是前開后閉還是前開后開的問題,嚴謹一下,使用 8.0.17 和 8.0.18 做比較。

現在我估計大概率是在 8.0.18 版本修復 Bug #29508068 的時候,把這個前開后閉給優化成了前開后開了。

對比 data_locks 數據:

注意紅色下劃線部分,在 8.0.17 版本中 id 17 時 LOCK_MODE 是 X,而在 8.0.25 版本中則是 X,GAP。

總結

本文主要通過實際操作,對主鍵加鎖時的 next-key lock 范圍進行了驗證,并查閱資料,對比版本得出不同的結論。

結論一:

  • 加鎖時,會先給表添加意向鎖,IX 或 IS;
  • 加鎖是如果是多個范圍,是分開加了多個鎖,每個范圍都有鎖;(這個可以實踐下 id 20 的情況)
  • 主鍵等值查詢,數據存在時,會對該主鍵索引的值加行鎖 X,REC_NOT_GAP;
  • 主鍵等值查詢,數據不存在時,會對查詢條件主鍵值所在的間隙添加間隙鎖 X,GAP;
  • 主鍵等值查詢,范圍查詢時情況則比較復雜:
    • 8.0.17 版本是前開后閉,而 8.0.18 版本及以后,進行了優化,主鍵時判斷不等,不會鎖住后閉的區間。
    • 臨界 = 查詢時,8.0.17 會鎖住下一個 next-key 的前開后閉區間,而 8.0.18 及以后版本,修復了這個 bug。

優化后,導致后開,這個不知道是因為優化后,主鍵的區間會直接后開,還是因為是個 bug。具體小伙伴可以嘗試一下。

結論二

通過使用 select * from performance_schema.data_locks; 和操作實踐,可以看出 LOCK_MODE 和 LOCK_DATE 的關系:

LOCK_MODE LOCK_DATA 鎖范圍
X,REC_NOT_GAP 15 15 那條數據的行鎖
X,GAP 15 15 那條數據之前的間隙,不包含 15
X 15 15 那條數據的間隙,包含 15

LOCK_MODE = X 是前開后閉區間;X,GAP 是前開后開區間(間隙鎖);X,REC_NOT_GAP 行鎖。

基本已經摸清主鍵的 next-key lock 范圍,注意版本使用的是 8.0.25。

疑問

  • 那唯一索引的 next-key lock 范圍是什么?
  • 當索引覆蓋時鎖的范圍和加鎖的索引分別是什么?
  • 我為什么說這個 bug 沒有完全修復,也是在非主鍵唯一索引中復現了這個 bug​。

文章篇幅有限,小伙伴可以先自己思考一下,盡量自己操作試一試,實踐出真知。至于具體答案,那就需要下一篇文章進行驗證并總結結論了。

到此這篇關于淺談MySQL next-key lock 加鎖范圍 的文章就介紹到這了,更多相關MySQL next-key lock 加鎖范圍 內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • MySQL出現Waiting for table metadata lock的原因方法
  • MySQL表結構變更你不可不知的Metadata Lock詳解
  • MYSQL METADATA LOCK(MDL LOCK)MDL鎖問題分析
  • MySQL slave 延遲一列 外鍵檢查和自增加鎖
  • MySQL 加鎖控制并發的方法
  • PHP+MySQL高并發加鎖事務處理問題解決方法
  • MYSQL METADATA LOCK(MDL LOCK) 理論及加鎖類型測試

標簽:自貢 龍巖 麗水 西寧 迪慶 南充 無錫 徐州

巨人網絡通訊聲明:本文標題《淺談MySQL next-key lock 加鎖范圍》,本文關鍵詞  淺談,MySQL,next-key,lock,加鎖,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《淺談MySQL next-key lock 加鎖范圍》相關的同類信息!
  • 本頁收集關于淺談MySQL next-key lock 加鎖范圍的相關信息資訊供網民參考!
  • 推薦文章
    欧美日韩国产欧美日美国产精品| av加勒比在线| 精品视频一区二区三区四区| 一本色道久久综合狠狠躁的推荐| 天天综合在线视频| 97人妻天天摸天天爽天天| 男人天堂av片| 亚洲国产视频一区| 538精品在线视频| 青草青青在线视频| 日韩av日韩在线观看| 亚洲精品国产品国语在线| 欧美日韩性视频| 全国精品久久少妇| 日韩av片免费观看| 91中文字幕在线| 一本色道久久88精品综合| 色八戒一区二区三区| 亚洲国产精品成人综合| 99精品一区二区| 国产xxxx振车| 91免费版黄色| 国模精品视频一区二区三区| 精品国产制服丝袜高跟| 亚洲免费在线看| 不卡视频在线观看| youjizz在线视频| 亚洲综合激情视频| 奇米精品一区二区三区| 欧美黑人xxxxx| 成人激情黄色网| 亚洲黄色在线观看| 波多野结衣一二区| 99免费视频观看| 制服诱惑一区| 亚洲视频在线观看日本a| 91精品视频在线免费观看| 欧美精品一区二区三区国产精品| 亚洲福利视频二区| 日韩欧美国产三级| 欧美日本一道本在线视频| 综合av第一页| 懂色av一区二区夜夜嗨| 国产激情精品久久久第一区二区| 成人久久精品人妻一区二区三区| 久久午夜精品视频| 99草草国产熟女视频在线| 日韩中文字幕亚洲精品欧美| 亚洲国产小视频在线观看| 国产精品家庭影院| 久久无码av三级| 国产欧美视频在线观看| 久久成人18免费观看| 成人福利小视频| 国产三级自拍视频| 精品黑人一区二区三区国语馆| 一区二区国产欧美| 天天干,夜夜操| 三级网站在线看| 无码精品视频一区二区三区| 亚洲aaa在线观看| 日韩高清一区在线| 国产精品1区二区.| 国产免费成人在线视频| 日韩一级中文字幕| 五月天激情国产综合婷婷婷| 中文字幕在线网站| 天天干视频在线观看| 日韩va欧美va亚洲va久久| 国产精品免费视频一区| 1区2区3区精品视频| 中文字幕字幕中文在线中不卡视频| 欧美中文字幕亚洲一区二区va在线| 色天使色偷偷av一区二区| 欧美xxxxxxxx| 美女视频黄免费的亚洲男人天堂| 韩国v欧美v亚洲v日本v| a在线播放不卡| 午夜影院久久久| 亚洲成人网在线| 992tv在线成人免费观看| 国内精品二区| 黄色av免费在线播放| 内射毛片内射国产夫妻| 97免费观看视频| 成人教育av在线| 欧美日韩国产区| 中文字幕久久久| 国产精品视频一| 欧美中日韩在线| 日本护士做爰视频| 免费人成视频在线| 波多野洁衣一区| 成人av网站在线观看免费| 国产女人aaa级久久久级| 大伊人狠狠躁夜夜躁av一区| 精品国产伦一区二区三区观看体验 | 成人免费va视频| 丁香婷婷综合五月| 亚洲一区二区三区四区五区黄| 亚洲自拍偷拍av| 亚洲最新av在线| 欧美激情精品久久久久久大尺度| 在线日韩欧美视频| 国产午夜精品视频| 欧美成人中文字幕在线| 国产精品国产亚洲精品看不卡15| 中文字幕乱码人妻综合二区三区| 亚洲综合第一区| 亚洲综合第一| 国产精品9999久久久久仙踪林| 欧美极品色图| 国产高潮失禁喷水爽到抽搐 | 日本欧美在线观看| 粉嫩嫩av羞羞动漫久久久| 国产欧美视频一区二区| 国产精品久线观看视频| 5566中文字幕一区二区电影| 68精品国产免费久久久久久婷婷| 51xx午夜影福利| 欧美日韩裸体免费视频| 日韩特黄一级片| 香蕉av一区二区三区| 国产精品不卡在线观看| 精品剧情在线观看| 91色中文字幕| www插插插无码免费视频网站| 国产呦小j女精品视频| 免费观看一级视频| 91无套直看片红桃| 国产精品66部| 欧美一级在线免费| 91精品久久久久| 日韩av片网站| 一区二区三区午夜| 97精品视频在线观看| 国产精品亚洲自拍| 免费涩涩18网站入口| 91久久国产综合久久91| 91在线码无精品| 国产视频精品免费播放| 久久久亚洲综合网站| 久久久精品国产sm调教网站| 东方伊人免费在线观看| 精品人妻一区二区三区潮喷在线| 美女爽到呻吟久久久久| 久久久91精品国产| 粉嫩av免费一区二区三区| 男人添女人荫蒂国产| 日本中文一区二区三区| 中文人妻熟女乱又乱精品| 成人免费无码av| 亚洲无码精品一区二区三区| 亚洲视频一二区| 国模吧一区二区| 91看片就是不一样| 国产主播第一页| 欧美亚洲综合色| 国产精品1234| 国产男男chinese网站| 亚洲无码精品一区二区三区| 成人在线一区二区三区| 亚洲精品一区在线观看| 视频一区三区| 日本午夜视频在线观看| 欧美性猛交xxxx富婆| 美女视频久久久| 久久国产精品视频在线观看| 精品无码一区二区三区电影桃花| 色域天天综合网| 色之综合天天综合色天天棕色| 伊人网伊人影院| 日本aⅴ亚洲精品中文乱码| 日韩中文理论片| 日本不卡视频一区| 天天干天天爱天天操| 91麻豆精品国产91久久久资源速度 | 又色又爽又黄无遮挡的免费视频| 国产精品久久久久久久久果冻传媒 | 96成人在线视频| 丰满少妇高潮一区二区| 久久综合中文色婷婷| 国产精品一区免费在线观看| 五月天网站亚洲| 国产精品亚洲片夜色在线| 国产特黄级aaaaa片免| 成人毛片在线观看| 久久久伊人日本| ass极品水嫩小美女ass| 91在线国产福利| 中文字幕亚洲一区在线观看| 一区二区三区四区视频在线 | 精品一区二区三区的国产在线播放 | 99久久久久久久| 狠狠色狠狠色综合日日小说| 美脚丝袜一区二区三区在线观看| 成人精品在线看| 欧美精品在线视频| 久久天天东北熟女毛茸茸| 一区二区视频在线免费观看| 日韩成人小视频| 色片在线免费观看| 国产大陆精品国产| 国产精品久久久久久久av大片| 放荡的美妇在线播放| 欧美日韩黄色大片| 超碰97在线看| 国产一区二区毛片| 国产精品美腿一区在线看| 日本老熟俱乐部h0930| 亚洲欧美日韩国产手机在线| 国产精品区免费视频| 国产免费久久久久| 在线观看三级视频欧美| www.国产在线播放| 福利一区二区在线观看| 国产日韩换脸av一区在线观看| 国产乱国产乱老熟| 欧美tickling网站挠脚心| 五月天激情视频在线观看| 成人国产精品免费网站| 亚洲自拍中文字幕| 特级西西444www高清大视频| 亚洲午夜色婷婷在线| 亚洲成人日韩在线| 一本高清dvd不卡在线观看| 乱妇乱女熟妇熟女网站| 国产iv一区二区三区| 国产精品久久久久久免费观看| 国产情侣av在线| 欧美激情视频在线| 最近免费中文字幕大全免费版视频| 国产丝袜一区视频在线观看| 国精品人伦一区二区三区蜜桃| 一本色道久久综合亚洲aⅴ蜜桃 | 日本一区二区视频在线观看| 国产精品美女黄网| 亚洲欧美综合在线观看| 国产国语刺激对白av不卡| 中文字幕 国产| 欧美精品午夜视频| 国产成人在线视频观看| 国产一区二区三区视频在线观看 | 国产xxxxxxxxx| 欧美性猛交xxx| 伊人国产在线视频| 色综合久久综合| 亚洲v在线观看| 精品视频999| 成年女人免费视频| 91精品欧美一区二区三区综合在| 国产乱了高清露脸对白| 欧美日韩国产天堂| 公侵犯人妻一区二区三区| 亚洲国产精品999| 天海翼在线视频| 精品国产乱码久久久久久影片| 国产永久免费网站| 国产精品对白交换视频| 777av视频| 亚洲尤物在线视频观看| 九九九九九国产| 欧美日本一道本| 天天舔天天操天天干| 精品视频在线观看日韩| 久热这里只有精品6| 久久久av一区| www.国产黄色| 51成人做爰www免费看网站| 深爱激情五月婷婷| 欧美乱偷一区二区三区在线| 久久久亚洲国产美女国产盗摄 | 亚洲成av人影院在线观看| 免费一级特黄3大片视频| 在线播放日韩专区| 伊人手机在线视频| 国产精品一二三在线| 风流少妇一区二区| 国产极品粉嫩福利姬萌白酱| 欧美日韩中文在线| 国产视频精品免费| 青草成人免费视频| 国产酒店精品激情| 天天想你在线观看完整版电影免费 | 黄色片一区二区三区| 999在线免费观看视频| 99久久伊人久久99| 少妇一级淫免费放| 亚洲老板91色精品久久| 做爰无遮挡三级| 久久99国产精品99久久| 亚洲午夜精品一区二区三区他趣| 性欧美丰满熟妇xxxx性久久久| 久久精品电影网站| 国精产品一品二品国精品69xx| 日韩成人在线资源| 欧美女同在线观看| 久久精品这里有| 国产成+人+综合+亚洲欧洲| 美女mm1313爽爽久久久蜜臀| 欧美精品一区免费| 欧美一级淫片aaaaaaa视频| wwwwxxxxx欧美| 欧美福利视频一区二区| 久久国产色av免费观看| 国产精品一区在线观看| 国产精品亚洲美女av网站| 久久午夜a级毛片| 亚洲国产高清自拍| 欧美性xxxx极品高清hd直播| 91麻豆免费视频| 免费在线观看成人| 黄色av一级片| 丰满人妻一区二区三区大胸| 欧美激情第六页| 欧美va亚洲va国产综合| 91蜜桃免费观看视频| 亚洲欧美日韩激情| 日本三级黄色网址| 欧美二区三区在线| 大量国产精品视频| 不卡视频一二三| 日本青青草视频| 国产免费一区二区三区四在线播放| 一个人www欧美| 中文字幕欧美日本乱码一线二线| 日本视频免费观看| a天堂中文字幕| 激情五月开心婷婷| 久久一区二区精品| 中文字幕在线成人| 91久久人澡人人添人人爽欧美| 国产91富婆露脸刺激对白| www.色亚洲| 韩国av在线免费观看| 免费观看黄一级视频| 日韩中文字幕观看| 成人午夜免费在线观看| 97人妻精品一区二区三区| 天天操夜夜操视频| 黄色在线免费观看| 在线观看天堂av| 国产免费一区二区视频| 97人人干人人| 欧美激情在线视频二区| 欧美精品在欧美一区二区少妇| 国产精品久久久久天堂| 麻豆国产欧美日韩综合精品二区 | 女人一区二区三区| 久久精品视频中文字幕| 天天操天天色综合| 国产成人精品午夜视频免费| 中文字幕在线看人| 国产精品一区二区人妻喷水| 中文字幕在线中文| 亚洲综合在线做性| 国产91精品不卡视频| 日韩在线观看免费av| 日韩精品一区二区三区视频在线观看| 亚洲国产成人私人影院tom| 成人福利视频在线| 蜜臀av亚洲一区中文字幕| 午夜一区在线观看| 国产精品99精品久久免费| 99久久国产综合精品色伊| 亚洲欧美区自拍先锋| 51妺嘿嘿午夜福利| 欧日韩免费视频| 日韩视频第二页| 亚洲在线观看网站| 国产乱子夫妻xx黑人xyx真爽| 最新视频 - x88av| 综合网五月天| 日韩福利在线| 成人性色av| 久久久久久999| 久久精品免费播放| 最近2019年好看中文字幕视频| 日韩电影免费观看在线观看| 精品久久久久久久久久ntr影视 | www.com日本| 欧美黄色免费影院| av电影一区二区三区| 久久久久久高清| 91久久精品在线| 国产精品成久久久久三级| 国产成人精品综合| 国产精品美乳一区二区免费| 久久久久久国产| 精品国产精品网麻豆系列| 亚洲午夜精品网| 91在线视频免费91| 久久精品久久精品| 国产原创一区二区三区| 国产福利精品导航| 久久精品99久久久| 播五月开心婷婷综合| 亚洲欧美日韩在线播放| 欧美无砖专区一中文字| 中文字幕日韩在线观看| 日本成人黄色片| 国产精品免费观看高清| 黄色录像特级片| 日韩欧美视频网站| 精品这里只有精品| 男人操女人下面视频| 天堂资源在线视频| 女人又爽又黄免费女仆| 欧美日韩国产精品综合| 久久夜色精品国产噜噜亚洲av|