精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

MySQL:MDL LOCK的“穿越行為”

數據庫 MySQL
語句是否能夠執行主要看的優先級矩陣和兼容矩陣,前者用于判斷本次執行的語句和堵塞中的MDL LOCK誰的優先級更高,優先級更高則可以繼續判斷兼容矩陣。

一、案例描述

最近遇到這么一個案例(5.7版本),大概的截圖如下:

當然這里是測試出來的,線上當時也是一個lock table read的語句和一大批insert into的語句被堵塞,當然要恢復很簡單,我們可以通過2種方式,來查殺堵塞源頭,如下:

  • table 級別的MDL LOCK,除非手動發送lock table,那么其持續時間通常為事務級別,而innodb_trx中記錄了全部的事務(只讀和讀寫),因此我們可以通過innodb_trx查詢事務持續時間長于processlist中“Waiting for table metadata lock”最長時間的session的事務通常就是堵塞源頭(當然也有例外,這個以后再討論)。
  • 訪問sys.schema_table_lock_waits進行判斷,如果為5.7需要手動開啟MDL LOCK的instrument,并且需要注意本視圖只能檢查table 級別的MDL LOCK,也就是本例中的“Waiting for table metadata lock”。

二、測試堵塞

但是在測試中,我們發現如下的執行順序insert是可以執行表結構和數據:

CREATE TABLE `t1` (
  `id` int(11) NOT NULL,
  `a` int(11) DEFAULT NULL,
  `b` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `a` (`a`)
)
mysql> select * from t1;
+----+------+------+
| id | a    | b    |
+----+------+------+
|  1 |    1 |    1 |
|  3 |    3 |    3 |
|  5 |    5 |    5 |
+----+------+------+

1.模擬(S1事務不提交)

S1

S2

S3

begin;

select * from t1 where id=1 for update;

不提交




lock table t1 read;

堵塞




insert into t1 values( 7,7,7);

插入成功

查看session狀態如下:

mysql> show processlist;
+----+-----------------+-----------+------+---------+------+---------------------------------+--------------------+-----------+---------------+
| Id | User            | Host      | db   | Command | Time | State                           | Info               | Rows_sent | Rows_examined |
+----+-----------------+-----------+------+---------+------+---------------------------------+--------------------+-----------+---------------+
|  1 | event_scheduler | localhost | NULL | Daemon  | 1046 | Waiting on empty queue          | NULL               |         0 |             0 |
|  3 | root            | localhost | new  | Query   |    0 | starting                        | show processlist   |         0 |             0 |
|  4 | root            | localhost | new  | Query   |  392 | Waiting for table metadata lock | lock table t1 read |         0 |             0 |
|  5 | root            | localhost | new  | Sleep   |  341 |                                 | NULL               |         0 |             0 |
+----+-----------------+-----------+------+---------+------+---------------------------------+--------------------+-----------+---------------+

這里可以看到這里只有lock table read的S2 處于堵塞狀態,而S3的insert的語句并沒有堵塞,那么案例中的insert 堵塞語句是哪里來的呢?

2. 模擬(S1提交)

S1

S2

S3

begin;

select * from t1 where id=1 for update;

接著將這個事務提交




lock table t1 read;

執行成功




insert into t1 values( 9,9,9);

堵塞

查看session狀態如下:

+----+-----------------+-----------+------+---------+------+---------------------------------+-------------------------------+-----------+---------------+
| Id | User            | Host      | db   | Command | Time | State                           | Info                          | Rows_sent | Rows_examined |
+----+-----------------+-----------+------+---------+------+---------------------------------+-------------------------------+-----------+---------------+
|  1 | event_scheduler | localhost | NULL | Daemon  | 1325 | Waiting on empty queue          | NULL                          |         0 |             0 |
|  3 | root            | localhost | new  | Query   |    0 | starting                        | show processlist              |         0 |             0 |
|  4 | root            | localhost | new  | Sleep   |  671 |                                 | NULL                          |         0 |             0 |
|  5 | root            | localhost | new  | Query   |    4 | Waiting for table metadata lock | insert into t1 values( 9,9,9) |         0 |             0 |
+----+-----------------+-----------+------+---------+------+---------------------------------+-------------------------------+-----------+---------------

這個時候因為lock table read執行成功了,insert語句繼續插入行則被MDL LOCK堵塞了。

三、問題匯總和分析

  • 問題1:為什么模擬中lock table table read堵塞后,insert 可以執行?
  • 問題2:為什么模擬中lock table table read執行成功后,insert會被堵塞?
  • 問題3:為什么案例中lock table table read被堵塞后,insert也被堵塞?

我們來一個問題一個問題的講述。首先我們要知道MDL LOCK 有2個矩陣,一個為優先級矩陣,一個為兼容矩陣,當判斷是否能過獲取的MDL LOCK的時候需要調用MDL_lock::can_grant_lock函數進行判斷,其判斷的主要邏輯就是:

  if (!(m_waiting.bitmap() & waiting_incompat_map)) 
  {
    if (! (fast_path_granted_bitmap() & granted_incompat_map)) //unobtrusive類型的MDL LOCK
    {
      if (! (m_granted.bitmap() & granted_incompat_map)) 

首先想看優先級矩陣,然后再看兼容矩陣,其中優先級矩陣為:

       Request  |         Pending requests for lock          |
        type    | S  SH  SR  SW  SWLP  SU  SRO  SNW  SNRW  X |
      ----------+--------------------------------------------+
      S         | +   +   +   +    +    +   +    +     +   - |
      SH        | +   +   +   +    +    +   +    +     +   + |
      SR        | +   +   +   +    +    +   +    +     -   - |
      SW        | +   +   +   +    +    +   +    -     -   - |
      SWLP      | +   +   +   +    +    +   -    -     -   - |
      SU        | +   +   +   +    +    +   +    +     +   - |
      SRO       | +   +   +   -    +    +   +    +     -   - |
      SNW       | +   +   +   +    +    +   +    +     +   - |
      SNRW      | +   +   +   +    +    +   +    +     +   - |
      X         | +   +   +   +    +    +   +    +     +   + |

兼容矩陣為:

      Request  |  Granted requests for lock            |
        type    | S  SH  SR  SW  SWLP  SU  SRO  SNW  SNRW  X  |
      ----------+---------------------------------------------+
      S         | +   +   +   +    +    +   +    +    +    -  |
      SH        | +   +   +   +    +    +   +    +    +    -  |
      SR        | +   +   +   +    +    +   +    +    -    -  |
      SW        | +   +   +   +    +    +   -    -    -    -  |
      SWLP      | +   +   +   +    +    +   -    -    -    -  |
      SU        | +   +   +   +    +    -   +    -    -    -  |
      SRO       | +   +   +   -    -    +   +    +    -    -  |
      SNW       | +   +   +   -    -    -   +    -    -    -  |
      SNRW      | +   +   -   -    -    -   -    -    -    -  |
      X         | -   -   -   -    -    -   -    -    -    -  |

當然期間有unobtrusive類型的MDL LOCK,這部分主要是優化MDL LOCK系統性能的,并不改變優先級和兼容性。

1. 問題1

這個問題我們按照時間序列進行描述:

S1

S2

S3

begin;

select * from t1 where id=1 for update;

不提交,獲取MDL_SHARED_WRITE(SW)類型獲取成功




lock table t1 read;

堵塞

MDL_SHARED_READ_ONLY(SRO)類型鎖獲取失敗堵塞,放入到wait位圖中




insert into t1 values( 7,7,7);

插入成功其需要的為MDL_SHARED_WRITE(SW)類型的鎖首先和wait位圖比對,根據的是優先級矩陣對比成功,可以嘗試獲取,然后和grant位圖(fast lock),比對的兼容矩陣,對比成功可以獲取。因此insert 是可以執行的

實際上這里s3的insert因為優先級矩陣并不會被堵塞中的MDL_SHARED_READ_ONLY(SRO)堵塞如下:

      Request  |         Pending requests for lock          |
        type    | S  SH  SR  SW  SWLP  SU  SRO  SNW  SNRW  X |
      ----------+--------------------------------------------+
      SW        | +   +   +   +    +    +   +    -     -   - |

而比對兼容矩陣的時候同樣MDL_SHARED_WRITE(SW)和MDL_SHARED_WRITE(SW)是兼容的因此就執行成功了,

       Request  |  Granted requests for lock            |
        type    | S  SH  SR  SW  SWLP  SU  SRO  SNW  SNRW  X  |
      ----------+---------------------------------------------+
      SW        | +   +   +   +    +    +   -    -    -    -  |

這就看起來像S3的insert語句“穿越”了S2的堵塞,成功獲取了MDL LOCK一樣,實際上就是優先級矩陣的判定。

2. 問題2

有了問題1的基礎,問題2我們可以直接看兼容矩陣,因為S1事務提交了,S2的lock table table read執行成功了,這個S3插入數據,實際上就是看MDL_SHARED_READ_ONLY(SRO)是否和MDL_SHARED_WRITE(SW)兼容,如下,

      Request  |  Granted requests for lock            |
        type    | S  SH  SR  SW  SWLP  SU  SRO  SNW  SNRW  X  |
      ----------+---------------------------------------------+
      SW        | +   +   +   +    +    +   -    -    -    -  |

可以看到并不兼容,因此堵塞

3. 問題3

這個問題實際上和lock table read 一大批表有關,因為加MDL LOCK鎖并不是一氣呵成的。比如 lock t1 read,t2 read,t3 read,t4 read,其中t4 有一個for update事務,這個時候t1\t2\t3 的lock table table read就可以能執行成功,而整個語句堵塞在t4的mdl lock上,而其他session如果對t1,t2,t3進行insert 則也是會堵塞的。測試如下:

S1

S2

S3

begin;

select * from tin for update;

不提交




lock table t999 read,test read ,tin read;

這里因為tin不能獲取MDL LOCK成功,所以語句堵塞,但是t999和test獲取MDL LOCK成功了




insert into t999 values('a');

堵塞,因為lock table t999 read執行成功了。這里肯定就堵塞。

這通常和mysqldump 分庫導出表沒有去掉lock-tables有關,這會導致一個庫的所有表現執行lock table read操作,因此我們要用--single-transaction來取掉這個加鎖的操作,



Option automatically turns off --lock-tables

這也是實際案例中的遇到的問題。

四、總結

本案例中我們得到幾個結論:

  • 語句是否能夠執行主要看的優先級矩陣和兼容矩陣,前者用于判斷本次執行的語句和堵塞中的MDL LOCK誰的優先級更高,優先級更高則可以繼續判斷兼容矩陣。后者用于判定本次執行的語句和獲取MDL LOCK的語句(或者事務)是否兼容。
  • lock table read 一大批表的時候,可能某些表加鎖成功了,而某些表加鎖堵塞了,看起來是整個lock table read語句堵塞了。
  • mysqldump導出如果全是innodb表肯定是要--single-transaction的。
責任編輯:趙寧寧 來源: MySQL學習
相關推薦

2012-03-01 14:43:32

MySQLMDL

2022-03-11 09:12:06

MySQLMDL

2025-04-24 10:56:01

MySQLInnoDB數據庫鎖

2024-06-12 14:03:31

MySQLInnoDB

2025-05-30 02:00:00

運維腳本MDL

2014-06-11 13:47:54

廣告技術

2021-03-02 12:34:47

MySQL解鎖表鎖定表

2021-06-08 09:41:26

MySQL加鎖范圍

2014-06-27 16:43:18

視頻會議終端華為

2016-04-13 10:47:04

2023-12-18 08:16:21

Kafka消息延遲消息的時序

2021-06-05 18:02:20

MySQL加鎖范圍

2010-08-11 13:28:46

Flex行為

2021-01-28 05:17:01

并發包JDK

2020-01-07 13:34:03

網絡攻擊惡意軟件網絡安全

2013-05-20 09:10:08

TD-LTE建網頻譜

2023-09-13 08:33:17

2011-06-20 11:01:00

2021-05-12 07:50:01

JsParseInt() 怪異

2021-02-02 11:02:20

React任務饑餓行為優先級任務
點贊
收藏

51CTO技術棧公眾號

国产成人毛毛毛片| a天堂视频在线观看| 三级外国片在线观看视频| 狠狠v欧美v日韩v亚洲ⅴ| 欧美激情va永久在线播放| 亚洲av网址在线| 日韩精品一页| 精品露脸国产偷人在视频| 无码免费一区二区三区免费播放 | 欧美日韩国产一二三| 国内自拍中文字幕| 男女视频在线观看免费| 国产在线精品一区二区三区不卡 | 亚洲第一区中文字幕| 亚洲精品乱码久久久久久自慰| 男人的天堂在线视频免费观看 | 久久精品五月婷婷| 国产精品-色哟哟| 久久亚洲电影| 久久久噜噜噜久久久| 亚洲综合图片一区| 要久久爱电视剧全集完整观看| 久久国产夜色精品鲁鲁99| 久久夜精品香蕉| 久久精品无码一区| 激情小说一区| 精品久久久久久久久久久久包黑料| 欧美在线观看视频网站| 精精国产xxx在线视频app| 亚洲精品成人精品456| 亚洲资源视频| www黄在线观看| 久久久久亚洲蜜桃| 精品免费一区二区三区蜜桃| 国产偷拍一区二区| 久久国产日韩欧美精品| 国产精品福利在线| 久久久蜜桃一区二区| 91久久亚洲| 欧美精品videossex性护士| 色哟哟一一国产精品| 精品九九在线| 在线观看日韩欧美| 永久免费av无码网站性色av| 夜夜春成人影院| 国产婷婷色综合av蜜臀av| av免费观看不卡| 哺乳一区二区三区中文视频| 91精品国产91久久久久久一区二区| 色综合手机在线| 日本精品裸体写真集在线观看| 精品美女久久久久久免费| 国产美女在线一区| 老牛影视精品| 日本电影亚洲天堂一区| 久久久久久久久久久免费视频| 亚洲精品一区| 91精品办公室少妇高潮对白| 激情网站五月天| 91精品店在线| 欧美精品三级日韩久久| 在线播放av中文字幕| 成人51免费| 精品国产1区二区| 中文字幕影片免费在线观看| 天堂99x99es久久精品免费| 亚洲精品美女免费| 蜜乳av中文字幕| 99久久婷婷| 久热精品视频在线免费观看| 全网免费在线播放视频入口| 欧美永久精品| 欧美多人爱爱视频网站| 国产精品a成v人在线播放| 亚洲精品1区2区| 欧美在线视频免费观看| 福利网址在线观看| 美女任你摸久久| 动漫美女被爆操久久久| 亚洲欧美日韩精品永久在线| 久久久久久一二三区| 亚洲精品免费在线看| 在线网址91| 欧美日韩精品在线视频| 五月婷婷激情久久| 精品中文在线| 亚洲欧美一区二区三区情侣bbw| 国产在线综合视频| 国内自拍视频一区二区三区| 欧美在线视频网| 国产伦精品一区二区三区免.费 | 91久久人澡人人添人人爽欧美| 亚洲天堂2018av| 成人自拍在线| 色999日韩欧美国产| 激情五月婷婷小说| 青青草97国产精品免费观看无弹窗版| 亚洲一区二区三区视频播放| 色综合久久网女同蕾丝边| 国产精品久久久久婷婷二区次| 日本一本中文字幕| 免费在线成人激情电影| 精品国产乱码久久久久久图片| av网在线播放| 一区二区自拍| 成人激情视频在线播放| 特黄视频在线观看| 亚洲人吸女人奶水| 一级黄色香蕉视频| 麻豆精品少妇| 美女啪啪无遮挡免费久久网站| 中文字幕第四页| 国产馆精品极品| 亚洲资源视频| 欧美影视资讯| 日韩精品亚洲元码| 久青草免费视频| 国产在线麻豆精品观看| 相泽南亚洲一区二区在线播放| 女人高潮被爽到呻吟在线观看| 91精品国产色综合久久久蜜香臀| 免费视频91蜜桃| 小嫩嫩精品导航| 国产精品一区二区三区在线 | www男人的天堂| 中文字幕二三区不卡| 中国丰满人妻videoshd | 国产 日韩 欧美 成人| 老色鬼精品视频在线观看播放| 麻豆av一区二区三区| 爱情岛亚洲播放路线| 欧美一区二区在线观看| 很污很黄的网站| 男人操女人的视频在线观看欧美| 麻豆传媒一区二区| 色多多在线观看| 亚洲国产精品久久91精品| www.av成人| 国产综合色精品一区二区三区| 色综合视频二区偷拍在线| 欧美成人精品三级网站| 亚洲人成网站在线播| 亚洲第一精品在线观看| 99精品桃花视频在线观看| 欧美久久在线观看| 精品少妇一区| 18久久久久久| 久久精品蜜桃| 欧美午夜影院一区| 少妇视频一区二区| 国产精品一区在线| 男人天堂a在线| 国产人妖ts一区二区| 韩国欧美亚洲国产| 手机亚洲第一页| 在线观看国产日韩| 日韩欧美在线视频播放| 久久se精品一区二区| 大桥未久一区二区| 中文字幕区一区二区三| 97在线视频免费| 九九热视频在线观看| 欧美午夜精品免费| 爱爱视频免费在线观看| 国产激情一区二区三区| 人人干视频在线| 九九久久成人| 成人黄色av播放免费| 香蕉久久aⅴ一区二区三区| 亚洲精品在线观看网站| 国产精品人人人人| 国产精品污网站| 女教师高潮黄又色视频| 亚洲伦理一区| 视频一区亚洲| 97色成人综合网站| 日本高清视频一区| 欧美jizz18hd性欧美| 欧美电影免费观看完整版| 麻豆久久久久久久久久| 国产精品入口麻豆九色| 性高潮免费视频| 久久国产成人| 中国一级黄色录像| 日韩精品免费一区二区三区竹菊| 国产精品女视频| 黄色大片在线| 中文字幕在线精品| 国产91绿帽单男绿奴| 欧美亚洲综合一区| 久久国产精品二区| 国产午夜亚洲精品羞羞网站| 久久精品国产99久久99久久久| 极品av少妇一区二区| 亚洲国产一区二区三区在线播| 一区二区三区四区视频免费观看| 日韩美女视频在线观看| 欧美巨大xxxx做受沙滩| 国产亚洲成精品久久| 亚洲精品无遮挡| 欧美日韩一级视频| 亚洲日本韩国在线| 亚洲欧美福利一区二区| 中文字幕在线1| 成人免费毛片嘿嘿连载视频| 精品999在线| 亚洲美女少妇无套啪啪呻吟| 在线视频不卡一区二区| 日韩一级电影| 成人精品水蜜桃| 久久精品黄色| 国产成人精品午夜| 99riav视频在线观看| 久久亚洲精品毛片| 大胆av不用播放器在线播放| 亚洲高清久久网| 国产黄色av片| 91精品国产91久久综合桃花| 最近中文在线观看| 色婷婷久久久久swag精品| 久久久久99精品成人片毛片| 国产精品传媒在线| 五月激情四射婷婷| 久久精品欧美一区二区三区不卡 | 午夜精品福利视频| а√天堂官网中文在线| 中文字幕九色91在线| 欧美理论在线观看| 国产午夜精品久久久| 刘亦菲毛片一区二区三区| 91精品国产黑色紧身裤美女| 中文字幕日韩三级| 欧洲色大大久久| 国产精品欧美综合| 在线观看日韩一区| 一级黄色在线观看| 欧美视频中文一区二区三区在线观看| 秋霞精品一区二区三区| 精品国产成人在线| 国产又黄又猛又粗又爽| 精品久久久久久久久久久久久久| 亚洲精品77777| 亚洲成人动漫一区| 日本少妇在线观看| 亚洲第一主播视频| 国产精品白浆一区二小说| 亚洲不卡在线观看| 日本一级片免费看| 91久久精品一区二区三| 欧美成人一区二区视频| 欧美亚洲一区三区| 一级片aaaa| 日韩午夜精品电影| 黄色aaa毛片| 日韩av在线免费播放| 邻家有女韩剧在线观看国语| 国产一区二区三区在线观看网站| 国产69久久| 日韩亚洲成人av在线| 在线中文字幕-区二区三区四区| 欧美老少做受xxxx高潮| 日本在线视频网址| 777国产偷窥盗摄精品视频| 中文字幕资源网在线观看免费| 日韩美女毛茸茸| 国产成人免费视频网站视频社区| 91高跟黑色丝袜呻吟在线观看| 福利电影一区| 欧洲精品一区色| 天天做天天爱天天爽综合网| 国产成人免费高清视频| 亚洲国产片色| 999在线免费视频| 国产伦精品一区二区三区在线观看| 四虎永久免费观看| 久久精品一区二区三区不卡| 麻豆一区在线观看| 偷拍一区二区三区四区| 亚洲av综合一区| 日韩免费电影一区| 久久天堂电影| 欧美另类极品videosbest最新版本| 97超碰在线免费| 国产精品女人网站| 国内精品偷拍| 亚洲一卡二卡三卡| 99热精品在线观看| 在线观看免费不卡av| www.日韩精品| 我要看一级黄色录像| 婷婷夜色潮精品综合在线| 中文字幕在线日本| 欧美成va人片在线观看| 黄视频在线观看免费| 九九综合九九综合| 精品三区视频| 韩国成人动漫在线观看| 91麻豆国产自产在线观看亚洲 | 黄色软件视频在线观看| 91精品久久久久久久久久另类| 人人精品亚洲| 伊人网在线免费| 日韩电影在线观看网站| 亚洲一区和二区| 国产精品久久久久久久久动漫| 亚洲欧美在线观看视频| 欧美精品99久久久**| 九色在线视频| 午夜精品久久久久久久久久久久久 | 国产精品高潮粉嫩av| 国产主播性色av福利精品一区| 中文字幕欧美人与畜| 丝袜美腿亚洲一区| 超碰caoprom| 亚洲美女少妇撒尿| 一区二区三区精彩视频| 亚洲性生活视频| 亚洲黄色免费av| 国内一区二区三区在线视频| 自拍日韩欧美| 911福利视频| 国产精品伦理一区二区| 少妇一级淫片日本| 亚洲欧美国产精品久久久久久久| av蜜臀在线| 国产不卡一区二区三区在线观看| 999精品一区| 福利片一区二区三区| 中文字幕av资源一区| 日韩av免费播放| 国产亚洲福利一区| 日本一区免费网站| 亚洲第一导航| 久久国产精品99久久人人澡| wwwww黄色| 欧美色精品天天在线观看视频| 福利片在线观看| 国产精品丝袜视频| 操欧美老女人| 欧美在线aaa| 成人免费视频在线观看| 一级黄色大片网站| 久久精品最新地址| 精品三级国产| 国产美女永久无遮挡| 成人在线一区二区三区| 国产一级淫片免费| 亚洲电影av在线| 日本黄色免费在线| 欧美激情导航| 免费高清不卡av| 久久人妻无码aⅴ毛片a片app| 欧美一级淫片007| 欧洲黄色一区| 久久av一区二区三区亚洲| 日韩中文欧美在线| 天天干天天操天天拍| 欧美久久婷婷综合色| 4438x成人网全国最大| 国产精品10p综合二区| 亚洲精品影视| 亚洲一区视频在线播放| 欧美日本一区二区| 成人黄视频在线观看| 国产亚洲自拍偷拍| 老司机午夜精品视频在线观看| 国产又黄又粗的视频| 欧美丰满少妇xxxxx高潮对白| 污污片在线免费视频| 狠狠色狠狠色综合人人| 手机精品视频在线观看| www日韩在线| 日韩高清免费观看| 色综合.com| 国产免费黄色小视频| 国产亚洲美州欧州综合国| 一区二区国产欧美| 久久久久久久久久久免费| 亚洲综合小说图片| 91亚洲一区二区| 疯狂欧美牲乱大交777| 日本免费在线视频| 精品一区二区久久久久久久网站| 日本大胆欧美人术艺术动态| 欧美激情图片小说| 亚洲深夜福利在线| 秋霞一区二区三区| 日本wwww视频| 亚洲精选免费视频| 免费黄色在线视频网站| 亚洲精品欧美日韩专区| 亚洲一区成人| 91嫩草|国产丨精品入口| 日韩高清av在线| 亚洲高清在线一区| 一级在线免费视频| 精品女同一区二区三区在线播放| 黄av在线播放| 日本在线观看一区二区三区| 豆国产96在线|亚洲|