亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > 詳細分析mysql MDL元數據鎖

詳細分析mysql MDL元數據鎖

熱門標簽:臨沂做地圖標注 廣東400企業電話申請流程 咸陽防封電銷卡 許昌外呼增值業務線路 新鄉智能外呼系統好處 申請400電話電話價格 地圖標注客戶付款 宜賓全自動外呼系統廠家 石家莊400電話辦理公司

前言:

當你在MySQL中執行一條SQL時,語句并沒有在你預期的時間內執行完成,這時候我們通常會登陸到MySQL數據庫上查看是不是出了什么問題,通常會使用的一個命令就是 show processlist,看看有哪些session,這些session在做什么事情。當你看到 waiting for table metadata lock 時,那就是遇到MDL元數據鎖了。本篇文章將會介紹MDL鎖的產生與排查過程。

1.什么是MDL鎖

MDL全稱為metadata lock,即元數據鎖。MDL鎖主要作用是維護表元數據的數據一致性,在表上有活動事務(顯式或隱式)的時候,不可以對元數據進行寫入操作。因此從MySQL5.5版本開始引入了MDL鎖,來保護表的元數據信息,用于解決或者保證DDL操作與DML操作之間的一致性。

對于引入MDL,其主要解決了2個問題,一個是事務隔離問題,比如在可重復隔離級別下,會話A在2次查詢期間,會話B對表結構做了修改,兩次查詢結果就會不一致,無法滿足可重復讀的要求;另外一個是數據復制的問題,比如會話A執行了多條更新語句期間,另外一個會話B做了表結構變更并且先提交,就會導致slave在重做時,先重做alter,再重做update時就會出現復制錯誤的現象。

元數據鎖是server層的鎖,表級鎖,每執行一條DML、DDL語句時都會申請MDL鎖,DML操作需要MDL讀鎖,DDL操作需要MDL寫鎖(MDL加鎖過程是系統自動控制,無法直接干預,讀讀共享,讀寫互斥,寫寫互斥),申請MDL鎖的操作會形成一個隊列,隊列中寫鎖獲取優先級高于讀鎖。一旦出現寫鎖等待,不但當前操作會被阻塞,同時還會阻塞后續該表的所有操作。事務一旦申請到MDL鎖后,直到事務執行完才會將鎖釋放。(這里有種特殊情況如果事務中包含DDL操作,mysql會在DDL操作語句執行前,隱式提交commit,以保證該DDL語句操作作為一個單獨的事務存在,同時也保證元數據排他鎖的釋放)。

注意:支持事務的InnoDB引擎表和不支持事務的MyISAM引擎表,都會出現Metadata Lock Wait等待現象。一旦出現Metadata Lock Wait等待現象,后續所有對該表的訪問都會阻塞在該等待上,導致連接堆積,業務受影響。

2.模擬與查找MDL鎖

MDL鎖通常發生在DDL操作掛起的時候,原因是有未提交的事務對該表進行DML操作。而MySQL的會話那么多,不知道哪個會話的操作沒有及時提交影響了DDL。通常我們排查這類問題,往往需要從information_schema.innodb_trx表中查詢當前在執行的事務,但當SQL已經執行過了,沒有commit,這個時候這個表中是看不到SQL的。

在MySQL5.7中,performance_schema庫中新增了metadata_locks表,專門記錄MDL的相關信息。首先要開啟MDL鎖記錄,執行如下SQL開啟:

UPDATE performance_schema.setup_instruments
SET ENABLED = 'YES', TIMED = 'YES'
WHERE NAME = 'wait/lock/metadata/sql/mdl';

下面展示下模擬及查找MDL鎖的過程:

# 會話1 事務中執行DML操作
mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into student_tb (stu_id,stu_name) values (1009,'xin');
Query OK, 1 row affected (0.00 sec)

mysql> select * from student_tb;
+--------------+--------+----------+---------------------+---------------------+
| increment_id | stu_id | stu_name | create_time   | update_time   |
+--------------+--------+----------+---------------------+---------------------+
|   1 | 1001 | from1 | 2019-11-28 16:36:14 | 2019-11-28 16:36:14 |
|   2 | 1002 | dfsfd | 2019-11-28 16:36:14 | 2019-11-28 16:36:14 |
|   3 | 1003 | fdgfg | 2019-11-28 16:36:14 | 2019-11-28 16:36:14 |
|   4 | 1004 | sdfsdf | 2019-11-28 16:36:14 | 2019-11-28 16:36:14 |
|   5 | 1005 | dsfsdg | 2019-11-28 16:36:14 | 2019-11-28 16:36:14 |
|   6 | 1006 | fgd  | 2019-11-28 16:36:14 | 2019-11-28 16:36:14 |
|   7 | 1007 | fgds  | 2019-11-28 16:36:14 | 2019-11-28 16:36:14 |
|   8 | 1008 | dgfsa | 2019-11-28 16:36:14 | 2019-11-28 16:36:14 |
|   9 | 1009 | xin  | 2019-11-28 17:05:29 | 2019-11-28 17:05:29 |
+--------------+--------+----------+---------------------+---------------------+

# 會話2 對該表加字段 執行DDL操作 發現DDL掛起
mysql> alter table student_tb add stu_age int after stu_name;

# 會話3 查詢所有會話 發現發生MDL鎖
mysql> show processlist;
+----+------+-----------+--------+---------+------+---------------------------------+-------------------------------------------------------+
| Id | User | Host  | db  | Command | Time | State       | Info             |
+----+------+-----------+--------+---------+------+---------------------------------+-------------------------------------------------------+
| 31 | root | localhost | testdb | Sleep | 125 |         | NULL             |
| 32 | root | localhost | testdb | Query | 7 | Waiting for table metadata lock | alter table student_tb add stu_age int after stu_name |
| 33 | root | localhost | testdb | Query | 0 | starting      | show processlist          |
+----+------+-----------+--------+---------+------+---------------------------------+-------------------------------------------------------+

# 會話3 查看metadata_locks表記錄 發現student_tb表有MDL鎖沖突
mysql> select * from performance_schema.metadata_locks;
+-------------+--------------------+----------------+-----------------------+---------------------+---------------+-------------+--------+-----------------+----------------+
| OBJECT_TYPE | OBJECT_SCHEMA  | OBJECT_NAME | OBJECT_INSTANCE_BEGIN | LOCK_TYPE   | LOCK_DURATION | LOCK_STATUS | SOURCE | OWNER_THREAD_ID | OWNER_EVENT_ID |
+-------------+--------------------+----------------+-----------------------+---------------------+---------------+-------------+--------+-----------------+----------------+
| TABLE  | testdb    | student_tb  |  94189250717664 | SHARED_WRITE  | TRANSACTION | GRANTED  |  |    56 |    34 |
| GLOBAL  | NULL    | NULL   |  139764477045472 | INTENTION_EXCLUSIVE | STATEMENT  | GRANTED  |  |    57 |    18 |
| SCHEMA  | testdb    | NULL   |  139764477697808 | INTENTION_EXCLUSIVE | TRANSACTION | GRANTED  |  |    57 |    18 |
| TABLE  | testdb    | student_tb  |  139764477697904 | SHARED_UPGRADABLE | TRANSACTION | GRANTED  |  |    57 |    18 |
| TABLE  | testdb    | student_tb  |  139764477697696 | EXCLUSIVE   | TRANSACTION | PENDING  |  |    57 |    18 |
| TABLE  | performance_schema | metadata_locks |  139764544135120 | SHARED_READ   | TRANSACTION | GRANTED  |  |    58 |    20 |
+-------------+--------------------+----------------+-----------------------+---------------------+---------------+-------------+--------+-----------------+----------------+

# 會話3 聯合其他系統表 查找出會話ID
mysql> select m.*,t.PROCESSLIST_ID from performance_schema.metadata_locks m left join performance_schema.threads t on m.owner_thread_id=t.thread_id;
+-------------+--------------------+----------------+-----------------------+---------------------+---------------+-------------+--------+-----------------+----------------+----------------+
| OBJECT_TYPE | OBJECT_SCHEMA  | OBJECT_NAME | OBJECT_INSTANCE_BEGIN | LOCK_TYPE   | LOCK_DURATION | LOCK_STATUS | SOURCE | OWNER_THREAD_ID | OWNER_EVENT_ID | PROCESSLIST_ID |
+-------------+--------------------+----------------+-----------------------+---------------------+---------------+-------------+--------+-----------------+----------------+----------------+
| TABLE  | testdb    | student_tb  |  94189250717664 | SHARED_WRITE  | TRANSACTION | GRANTED  |  |    56 |    34 |    31 |
| GLOBAL  | NULL    | NULL   |  139764477045472 | INTENTION_EXCLUSIVE | STATEMENT  | GRANTED  |  |    57 |    18 |    32 |
| SCHEMA  | testdb    | NULL   |  139764477697808 | INTENTION_EXCLUSIVE | TRANSACTION | GRANTED  |  |    57 |    18 |    32 |
| TABLE  | testdb    | student_tb  |  139764477697904 | SHARED_UPGRADABLE | TRANSACTION | GRANTED  |  |    57 |    18 |    32 |
| TABLE  | testdb    | student_tb  |  139764477697696 | EXCLUSIVE   | TRANSACTION | PENDING  |  |    57 |    18 |    32 |
| TABLE  | performance_schema | metadata_locks |  139764544135120 | SHARED_READ   | TRANSACTION | GRANTED  |  |    58 |    22 |    33 |
| TABLE  | performance_schema | threads  |  139764549217280 | SHARED_READ   | TRANSACTION | GRANTED  |  |    58 |    22 |    33 |
+-------------+--------------------+----------------+-----------------------+---------------------+---------------+-------------+--------+-----------------+----------------+----------------+

# 結果解讀:從上面結果明顯可以看出會話31持有student_tb表的SHARED_WRITE鎖,
# 需要等待其提交后或手動殺掉該會話方可解除MDL鎖。

3.如何優化與避免MDL鎖

MDL鎖一旦發生會對業務造成極大影響,因為后續所有對該表的訪問都會被阻塞,造成連接積壓。我們日常要盡量避免MDL鎖的發生,下面給出幾點優化建議可供參考:

  • 開啟metadata_locks表記錄MDL鎖。
  • 設置參數lock_wait_timeout為較小值,使被阻塞端主動停止。
  • 規范使用事務,及時提交事務,避免使用大事務。
  • 增強監控告警,及時發現MDL鎖。
  • DDL操作及備份操作放在業務低峰期執行。
  • 少用工具開啟事務進行查詢,圖形化工具要及時關閉。

總結:

本篇文章主要分三方面來詳解MDL鎖,首先介紹了MDL鎖產生的原因及作用,然后我們模擬出MDL鎖,并給出查找及解決方法,最后給出幾點避免MDL鎖的建議。其實,MDL鎖在DB運維過程中經常遇到,它不是洪水猛獸,只是為了保護數據庫對象,保證數據一致性。希望大家看完這篇文章后能對MDL鎖有更清晰的認識。

以上就是詳細分析mysql MDL元數據鎖的詳細內容,更多關于mysql MDL元數據鎖的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • MySQL如何查看元數據鎖阻塞在哪里
  • MYSQL METADATA LOCK(MDL LOCK)MDL鎖問題分析

標簽:臺灣 日照 鷹潭 鎮江 北京 阜新 合肥 貴州

巨人網絡通訊聲明:本文標題《詳細分析mysql MDL元數據鎖》,本文關鍵詞  詳細,分析,mysql,MDL,元,數據,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《詳細分析mysql MDL元數據鎖》相關的同類信息!
  • 本頁收集關于詳細分析mysql MDL元數據鎖的相關信息資訊供網民參考!
  • 推薦文章
    91麻豆精品国产片在线观看| 亚洲第一色在线| 天天做日日干| 一a一级片| 国产原创中文字幕| 91麻豆爱豆果冻天美星空| a级黄色毛片免费播放视频| 国产亚洲精品成人a在线| 欧美激情一区二区三区在线| 国产伦理精品| 国产a毛片| 日韩男人天堂| 国产麻豆精品免费密入口| 中文字幕一区二区三区 精品| 精品国产香蕉在线播出| 日韩在线观看免费完整版视频| 九九免费精品视频| 精品视频在线观看视频免费视频| 久久久成人网| 日本伦理片网站| 国产a视频| 日韩专区亚洲综合久久| 成人高清视频在线观看| 国产麻豆精品免费密入口| 九九精品在线播放| 国产视频一区二区在线播放| 欧美一级视频高清片| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 亚洲天堂免费观看| 欧美电影免费| 成人影院一区二区三区| 精品国产亚洲人成在线| 青青久久国产成人免费网站| 国产视频在线免费观看| 国产成人精品影视| 人人干人人草| 四虎影视久久久| 一a一级片| 成人在免费观看视频国产| 你懂的福利视频| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 美女免费黄网站| 国产不卡高清| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 美女免费毛片| 免费国产在线视频| 亚洲 欧美 91| 国产成人精品综合在线| 一级女性大黄生活片免费| 亚洲天堂一区二区三区四区| 国产一区二区精品| 免费国产在线视频| 国产欧美精品午夜在线播放| 精品国产香蕉在线播出| 欧美国产日韩在线| 精品国产香蕉伊思人在线又爽又黄| 久久国产精品自线拍免费| 国产伦精品一区二区三区无广告| 国产成人欧美一区二区三区的| 精品视频免费看| 久久国产精品自线拍免费| 国产a网| 亚洲天堂一区二区三区四区| 中文字幕一区二区三区 精品| 精品视频免费看| 午夜久久网| 四虎影视库国产精品一区| 亚久久伊人精品青青草原2020| 国产成人精品影视| 精品视频免费在线| 美女免费黄网站| a级毛片免费观看网站| 欧美激情影院| 国产美女在线观看| 99久久网站| 亚洲天堂免费观看| 九九久久99| 中文字幕一区二区三区精彩视频| 久久精品店| 欧美电影免费| 亚洲 欧美 91| 精品国产亚一区二区三区| 精品美女| 国产成+人+综合+亚洲不卡| 国产伦久视频免费观看 视频| 麻豆污视频| 精品久久久久久中文字幕一区 | 精品视频一区二区三区免费| 国产亚洲精品aaa大片| 999久久久免费精品国产牛牛| 国产网站在线| 国产极品白嫩美女在线观看看| 午夜激情视频在线观看| 欧美激情一区二区三区视频| 天天做日日爱| 97视频免费在线| 日韩男人天堂| 日韩字幕在线| 色综合久久天天综合| 欧美1卡一卡二卡三新区| 国产网站麻豆精品视频| 色综合久久天天综合绕观看| 精品国产一区二区三区久久久蜜臀| 久草免费在线观看| 欧美一级视频免费| 成人a大片高清在线观看| 日本在线不卡免费视频一区| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 精品久久久久久中文字幕2017| 亚洲 男人 天堂| 欧美激情一区二区三区视频| 精品国产一区二区三区精东影业 | 高清一级淫片a级中文字幕| 欧美国产日韩在线| 99热热久久| 国产精品免费精品自在线观看| 日本伦理片网站| 精品久久久久久中文字幕一区 | 国产亚洲精品aaa大片| 欧美激情一区二区三区视频高清| 一级毛片看真人在线视频| 天堂网中文字幕| 成人免费网站久久久| 国产网站在线| 91麻豆精品国产自产在线观看一区| 国产精品1024永久免费视频| 国产视频在线免费观看| 久久99中文字幕久久| 亚洲第一色在线| 亚洲 欧美 91| 午夜在线亚洲| 欧美激情一区二区三区在线 | 韩国三级视频网站| 国产成人精品影视| 青青久在线视频| 日韩一级黄色| 亚洲精品久久久中文字| 日本在线www| 久久成人亚洲| 欧美激情一区二区三区在线| 亚州视频一区二区| 天天做日日爱| 国产a毛片| 天天做日日干| 成人免费网站久久久| 日本免费乱人伦在线观看| 国产a视频| 国产91精品一区二区| 欧美激情一区二区三区在线| 国产麻豆精品| 999精品在线| 台湾毛片| 国产亚洲精品成人a在线| 青青青草视频在线观看| 欧美大片aaaa一级毛片| 国产一区二区精品久| 一a一级片| 天天做人人爱夜夜爽2020毛片| 成人影院久久久久久影院| 一级毛片视频免费| 天天做人人爱夜夜爽2020| 天天做日日干| 日韩字幕在线| 韩国三级视频网站| 国产欧美精品午夜在线播放| 欧美a免费| 午夜在线影院| 精品国产亚洲一区二区三区| 色综合久久天天综线观看| 美女免费黄网站| 精品视频一区二区三区免费| 日本在线播放一区| 欧美激情一区二区三区视频| 天天做日日爱夜夜爽| 四虎论坛| 99色视频在线观看| 999久久66久6只有精品| 四虎精品在线观看| 日韩专区一区| 可以免费看污视频的网站| 国产麻豆精品| 你懂的国产精品| 香蕉视频一级| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 国产国语在线播放视频| 午夜精品国产自在现线拍| 亚欧视频在线| 国产精品自拍亚洲| 国产一级生活片| 香蕉视频久久| 欧美激情一区二区三区视频| 精品视频在线观看一区二区| 精品视频在线观看一区二区 | 精品视频在线看| 美女免费精品视频在线观看| 欧美一级视频高清片| 九九免费高清在线观看视频| 国产高清在线精品一区二区| 成人免费网站久久久| 日韩欧美一二三区|