中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL5.6與MySQL5.7中語句lock table ...read加鎖的區別有哪些

發布時間:2021-11-06 09:04:27 來源:億速云 閱讀:230 作者:小新 欄目:MySQL數據庫

小編給大家分享一下MySQL5.6與MySQL5.7中語句lock table ...read加鎖的區別有哪些,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

背景:最近在測試lock table xxx read與DML之間的鎖等待測試,突然發現mysql5.6與mysql5.7的show full processlist與show engine innodb status \G的顯示不相同
一個為 wait for table lock 而另外一個則是waiting for table metadata lock,甚是費解,于是就去追查了下 。

現象描述:
1.MySQL5.6
SESSION 1:


SESSION 2:


show full processlist與show engine innodb status \G的輸出(顯示為waiting for table level lock)



2.MySQL 5.7
SESSION 1:


SESSION 2:


show full processlist與show engine innodb status\G(顯示為waiting for table metadata lock)





分析:
在MySQL5.6中,我們從show engine innodb status以及show full processlist中都能看到狀態為waiting for table level lock,說明是一個事物表級鎖
而在MySQL5.7中,我們只從show full processlist看到了鎖等待,是waiting for table metadata lock,說明這是一個metadata lock(元數據鎖)而不是一個事物鎖
按本人對5.6理解是,session1語句lock table locktest1 read在MDL階段會加上MDL_SHARED_READ,而session2的update語句在MDL階段會加MDL_SHARED_WRITE,因此在MDL階段不會沖突,接下來,session1會在locktest1表上上S鎖(表鎖),而session2會在locktest1表上加IX鎖,由于IX鎖與session1的表級鎖S鎖沖突,故而在等待,結果為waiting for table level lock;然而如下5.7的顯示是waiting for metadata lock,是發生在MDL階段的鎖等待,這讓我很費解,是MySQL5.7鎖機制改變了呢?還是oracle官方的一個顯示bug(按理來說,oracle不會出現這么低級的錯誤)?
從mysql5.7.3起,在performance_schema庫中新增了metadata_locks表,用來監控MDL(metadata lock)的鎖情況,我們來追蹤一下:


從圖中,我們看出,MySQL5.7對于lock table locktest1 read 加的是SHARED_READ_ONLY(而MySQL5.7新增的類型),與update語句的SHARED_WRITE互斥,導致了update在MDL階段等待,所以狀態為waiting for table metadata lock。
那為什么SHARED_READ_ONLY會與SHARED WRITE 互斥呢?我們從源代碼中找出描述,如下:
  /*
    A shared metadata lock for cases when we need to read data from table
    and block all concurrent modifications to it (for both data and metadata).
    Used by LOCK TABLES READ statement.
  */
  MDL_SHARED_READ_ONLY,

即:  MDL_SHARED_READ_ONLY會阻止所有的并發修改,(包括數據以及元數據)。

看完了這篇文章,相信你對“MySQL5.6與MySQL5.7中語句lock table ...read加鎖的區別有哪些”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

黄浦区| 乐至县| 高陵县| 广德县| 安陆市| 南丰县| 深泽县| 铜梁县| 四平市| 科尔| 三门峡市| 彩票| 元朗区| 宝鸡市| 巴彦县| 隆回县| 民乐县| 泾阳县| 花莲市| 吉木乃县| 海淀区| 库尔勒市| 天津市| 丰宁| 黔江区| 滕州市| 安丘市| 都匀市| 禹州市| 海盐县| 霸州市| 锦屏县| 无极县| 海南省| 汕头市| 隆化县| 蒙山县| 龙江县| 南丹县| 海原县| 青浦区|