欧美日韩激情_美女国产一区_国产精品久久久久影院日本_69xxx在线

你必須要了解MySQL的鎖知識

2021-02-03    分類: 網站建設

一、前言

MySQL 的鎖按照范圍可以分為全局鎖、表鎖、行鎖,其中行鎖是由數據庫引擎實現的,并不是所有的引擎都提供行鎖,MyISAM 就不支持行鎖,所以文章介紹行鎖會以InnoDB引擎為例來介紹行鎖。

二、全局鎖

MySQL 提供全局鎖來對整個數據庫實例加鎖。

語法:

  1. FLUSH TABLES WITH READ LOCK 

這條語句一般都是用來備份的,當執行這條語句后,數據庫所有打開的表都會被關閉,并且使用全局讀鎖鎖定數據庫的所有表,同時,其他線程的更新語句(增刪改),數據定義語句(建表,修改表結構)和更新類的事務提交都會被阻塞。

在mysql 8.0 以后,對于備份,mysql可以直接使用備份鎖。

語句:

  1. LOCK INSTANCE FOR BACKUP 
  2.  
  3. UNLOCK INSTANCE 

這個鎖的作用范圍更廣,這個鎖會阻止文件的創建,重命名,刪除,包括 REPAIR TABLE TRUNCATE TABLE, OPTIMIZE TABLE操作以及賬戶的管理都會被阻塞。當然這些操作對于內存臨時表來說是可以執行的,為什么內存表不受這些限制呢?因為內存表不需要備份,所以也就沒必要滿足這些條件。

三、表鎖

Mysql的表級別鎖分為兩類,一類是元數據鎖(Metadata Lock,MDL),一種是表鎖。

元數據鎖(MDL) 不需要顯式使用,在訪問一個表的時候會被自動加上。這個特性需要MySQL5.5版本以上才會支持,當對一個表做增刪改查的時候,該表會被加MDL讀鎖;當對表做結構變更的時候,加MDL寫鎖。MDL鎖有一些規則:

  • 讀鎖之間不互斥,所以可以多線程多同一張表進行增刪改查。
  • 讀寫鎖、寫鎖之間是互斥的,為了保證表結構變更的安全性,所以如果要多線程對同一個表加字段等表結構操作,就會變成串行化,需要進行鎖等待。
  • MDL的寫鎖優先級比MDL讀鎖的優先級,但是可以設置max_write_lock_count系統變量來改變這種情況,當寫鎖請求超過這個變量設置的數后,MDL讀鎖的優先級會比MDL寫鎖的優先級高。(默認情況下,這個數字會很大,所以不用擔心寫鎖的優先級下降)
  • MDL的鎖釋放必須要等到事務結束才會釋放

所以我們在操作數據庫表結構時候必須要注意不要使用長事務,這里具體是什么意思呢?我舉個例子說明下:

上圖表示演示了4個session執行語句,首先SessionA開啟了事務沒有提交,接著sessionB執行查詢,因為是獲取MDL讀鎖,所以互相不影響,可以正常執行,SessionC新增一個字段,由于MDL寫和讀是互斥的,所以SessionC會被阻塞,之后SessionD開始執行一個查詢語句,由于SessionC的阻塞,所以SessionD也阻塞了。所以,我們模擬的SessionA的事務是長事務,然后后面執行了修改表結構,會導致后續對該表所有的讀寫操作都不可行了。所以在實際場景中,如果業務請求比較頻繁的時候,對表結構進行修改的時候就有可能導致該庫的線程被阻塞滿。

表鎖 的語法如下:

  1. LOCK TABLES  
  2.     tbl_name [[AS] alias] lock_type  
  3.     [, tbl_name [[AS] alias] lock_type] ...  
  4. lock_type: {  
  5.     READ [LOCAL]  
  6.   | [LOW_PRIORITY] WRITE  
  7. }  
  8. UNLOCK TABLES 

表鎖分為讀鎖和寫鎖,讀鎖不互斥,但是獲取讀鎖不能寫入數據,其他沒有獲取到讀鎖的session也是可以讀取表的,所以讀鎖的目的就是限制表被寫。如果表被讀鎖鎖住后,再執行插入語句會報錯,報錯如下:

  1. 1099 - Table 'XXXX' was locked with a READ lock and can't be updated 

寫鎖被獲取后可以對表進行讀寫,寫鎖是互斥的,一旦某個session獲取到表的寫鎖,另外的session無法訪問這個表,直到寫鎖被釋放。

表的解鎖可以使用unlock tables解鎖,也可以客戶端口自動解鎖。lock tables鎖表會獨占式的鎖住表,除了限制其他線程對該表的讀寫,也會限制本線程接下來的操作對象。

四、行鎖(InnoDB)

MySQL的行鎖是在引擎層面實現的,所以這里討論的也是InnoDB引擎下的行鎖,下面會詳細介紹InnoDB下常見的幾種行鎖

4.1 共享鎖

共享鎖能允許事務獲取到鎖后進行讀操作,共享鎖是不互斥的,一個事務獲取到共享鎖后,另外一個事務也可以獲取共享鎖,獲取共享鎖后不能進行寫操作。

4.2 排它鎖

排他鎖允許事務獲取到鎖后進行更新一行或者刪除某一行操作,排他鎖顧名思義是互斥的,一個事務獲取到排他鎖后,其他事務不能獲取到排他鎖,直到這個鎖被釋放。

4.3 意向鎖

InnoDB支持多種粒度的鎖,允許行鎖和表鎖共存,這里說的意向鎖其實是一種表級別的鎖,但是我把它放在行鎖里面是因為它不會單獨存在,它的出現肯定會伴隨著行鎖(共享鎖或者排他鎖),它主要的目的就是表示將要鎖定表中的行或者正在鎖定表中的行。

意向鎖根據和行鎖的組合可以分為:

  • 意向排他鎖:表明將要在表中的某些行獲取排他鎖
  • 意向共享鎖:表明將要在表中的某些行獲取共享鎖

意向鎖的獲取必須在行鎖獲取之前,也就是說獲取共享鎖之前必須先要獲取共享意向鎖,對于排他鎖也是一樣的道理。

那么這個意向鎖到底有什么作用呢?

解釋這個之前,我們先看看意向鎖和行鎖之前的兼容關系:

--- 排他鎖(X) 意向排他鎖(IX) 共享鎖(S) 意向共享鎖(IS)
排他鎖(X) 沖突 沖突 沖突 沖突
意向排他鎖(IX) 沖突 兼容 沖突 兼容
共享鎖(S) 沖突 沖突 兼容 兼容
意向共享鎖(IS) 沖突 兼容 兼容 兼容

我們假設有2個事務A和事務B,事務獲取到了共享鎖,鎖住了表中的某一行,這一行只能讀,不能寫,現在事務B要申請整個表的寫鎖。如果事務B申請成功,那么肯定是可以對表中所有的行進行寫操作的,那么肯定與A獲取的行鎖沖突。數據庫為了避免這種沖突,就會進行沖突檢測,那么如何去檢測呢?有兩種方式:

  • 判斷表是否已經被其他事務用表級鎖鎖住。
  • 判斷表中的每一行是否被行鎖鎖住。

判斷表中的每一行需要遍歷所有記錄,效率太差,所以數據庫就用第一種方式去做沖突檢測,也就是用到了意向鎖。

總結

本文主要從MySQL的加鎖范圍來分析了MySQL的鎖,MySQL根據加鎖范圍可以分為全局鎖、表鎖、行鎖。全局鎖和表鎖是MySQL自己實現,行鎖都是由引擎層面去實現。InnoDB下的行鎖主要分為共享鎖和排他鎖。共享鎖請求后,行只能讀,共享鎖之間不互斥。排他鎖獲取后能更新和刪除行,排他鎖與其他鎖都互斥。最后我在行鎖的基礎上提到了意向鎖,意向鎖主要表示正在鎖住行或者即將鎖住行,為了在鎖沖突檢測中提高效率。當然InnoDB下還有其他鎖,比如間隙鎖,記錄鎖,Next-Key鎖等,這些都不在本文的探討范圍之內,如有興趣的同學可以自行研究。

名稱欄目:你必須要了解MySQL的鎖知識
網站鏈接:http://m.kartarina.com/news39/98939.html

成都網站建設公司_創新互聯,為您提供關鍵詞優化虛擬主機品牌網站制作網站排名App開發網站內鏈

廣告

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

搜索引擎優化
欧美日韩激情_美女国产一区_国产精品久久久久影院日本_69xxx在线
中文字幕不卡一区| 欧美一级理论片| 亚洲欧美另类图片小说| 欧美男生操女生| 久久99日本精品| 亚洲乱码日产精品bd| 精品三级在线观看| 在线看不卡av| 成人性视频网站| 欧美日本高清视频在线观看| 欧美专区亚洲专区| 911精品国产一区二区在线| 国产成人亚洲精品狼色在线| 制服.丝袜.亚洲.中文.综合| 欧美精品在线观看一区二区| heyzo一本久久综合| 久久精品久久久精品美女| 久久超碰97人人做人人爱| 高清久久久久久| 国产jizzjizz一区二区| a级精品国产片在线观看| 日本久久一区二区三区| 欧美视频在线播放| 国产91精品久久久久久久网曝门| 成人h动漫精品一区二区| 国产一区 二区 三区一级| 免费av成人在线| 日产精品久久久久久久性色| 亚洲一区二区三区在线| 一区二区三区日韩欧美精品| 亚洲欧美日韩一区| 日韩黄色在线观看| 日本免费新一区视频| 国产成人精品亚洲午夜麻豆| 色成年激情久久综合| 久久婷婷成人综合色| 2020国产精品| 亚洲第一二三四区| 亚洲成人在线免费| 国产.精品.日韩.另类.中文.在线.播放| 91美女在线看| 欧美日韩另类一区| 国产欧美va欧美不卡在线 | 久久国产精品色| 99久久综合色| 久久久久久久久免费| 国产精品色眯眯| 亚洲欧美一区二区久久| 久久99久久精品欧美| 国产高清成人在线| 欧美精品电影在线播放| 樱花影视一区二区| 成人免费av资源| 久久影院午夜论| 奇米综合一区二区三区精品视频| 色综合久久六月婷婷中文字幕| 欧美视频日韩视频在线观看| 日本一二三不卡| 国产福利精品导航| 日韩免费成人网| 午夜激情一区二区三区| 亚洲一区二区三区不卡国产欧美| 成人国产精品免费观看动漫| 久久这里都是精品| 国产一区二区导航在线播放| 亚洲精品一区在线观看| 亚洲天堂成人网| 久久爱另类一区二区小说| 69成人精品免费视频| 亚洲高清久久久| 国产福利一区在线观看| 久久亚洲精精品中文字幕早川悠里 | 国模套图日韩精品一区二区| 成人精品免费看| 国产精品视频一二三| 国产91对白在线观看九色| av动漫一区二区| 日本一区二区免费在线| 成人福利在线看| 亚洲欧美视频在线观看视频| 91福利资源站| 日韩不卡在线观看日韩不卡视频| 麻豆久久一区二区| 91视频免费播放| 一区二区三区国产精品| 欧美日韩激情一区| 麻豆成人av在线| 国产丝袜欧美中文另类| 奇米精品一区二区三区在线观看一 | 国模娜娜一区二区三区| 欧美激情一区二区三区在线| 91在线精品一区二区| 欧美精品一区男女天堂| 国产a久久麻豆| 国产精品高清亚洲| 国产精品18久久久久| 亚洲综合男人的天堂| 日韩一区二区三区电影 | 欧美乱妇15p| 极品少妇xxxx偷拍精品少妇| 国产欧美精品在线观看| 91久久奴性调教| 不卡的av电影在线观看| 亚洲成av人影院在线观看网| 精品国产不卡一区二区三区| 亚洲精品免费电影| 欧美一卡二卡三卡| 天天免费综合色| 国产三级一区二区三区| 欧美色精品在线视频| 亚洲欧美日韩国产综合在线| 欧美一区二区三区公司| www.日韩在线| 日韩成人精品视频| 亚洲视频狠狠干| 精品剧情在线观看| 在线观看国产精品网站| 国产欧美综合色| 欧美一区二区精品| 色综合色狠狠综合色| 国产美女主播视频一区| 亚洲电影一区二区| 亚洲欧洲av在线| 99精品国产视频| 寂寞少妇一区二区三区| 午夜精品影院在线观看| 中文字幕一区二| 国产婷婷色一区二区三区四区| 午夜精品久久久久| 亚洲色图都市小说| 中文字幕精品一区二区精品绿巨人| 欧美日韩成人综合在线一区二区| 99久久国产综合精品色伊 | 色婷婷综合五月| 国产成人鲁色资源国产91色综| 日韩精品一级二级 | 午夜精品久久久久久久99水蜜桃 | 激情五月激情综合网| 日本不卡的三区四区五区| 一区2区3区在线看| 一区二区三区在线免费| 亚洲欧洲一区二区在线播放| 国产亚洲精品超碰| 欧美精品一区二区三区蜜桃| 精品一区二区三区免费| 麻豆精品精品国产自在97香蕉| 午夜电影一区二区三区| 亚洲va国产va欧美va观看| 亚洲成人你懂的| 视频在线在亚洲| 青青草伊人久久| 久久aⅴ国产欧美74aaa| 精品亚洲成av人在线观看| 精品一二三四区| 国产成人免费视频网站| 福利电影一区二区三区| 成人av在线一区二区| 亚洲欧洲成人精品av97| 亚洲欧美日韩国产综合| 亚洲第四色夜色| 久久精品国产一区二区三区免费看| 免费成人结看片| 国产麻豆午夜三级精品| 不卡的av中国片| 欧美日韩一区高清| 日韩精品资源二区在线| 国产色婷婷亚洲99精品小说| 亚洲欧洲www| 日产欧产美韩系列久久99| 韩国三级在线一区| 99综合影院在线| 欧美肥妇毛茸茸| 久久久噜噜噜久久中文字幕色伊伊 | 亚洲综合久久av| 男女男精品视频| 风流少妇一区二区| 欧美图区在线视频| 精品捆绑美女sm三区| 中文字幕日韩欧美一区二区三区| 亚洲国产视频在线| 国内精品久久久久影院色 | 久久亚洲精品小早川怜子| 亚洲精品一卡二卡| 久久精品国产在热久久| 91啪亚洲精品| 精品国产一二三区| 亚洲欧美日韩在线| 国产精品99久久久久久似苏梦涵| 91高清在线观看| 国产欧美日韩麻豆91| 天堂久久久久va久久久久| 丁香亚洲综合激情啪啪综合| 欧美二区乱c少妇| 亚洲欧美激情在线| 国产精品自拍在线| 日韩欧美国产wwwww| 亚洲成av人片在线观看| 色域天天综合网| 欧美国产亚洲另类动漫| 青青青伊人色综合久久|