校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 詳細(xì)分析mysql MDL元數(shù)據(jù)鎖

詳細(xì)分析mysql MDL元數(shù)據(jù)鎖

熱門標(biāo)簽:臨沂做地圖標(biāo)注 廣東400企業(yè)電話申請流程 咸陽防封電銷卡 許昌外呼增值業(yè)務(wù)線路 新鄉(xiāng)智能外呼系統(tǒng)好處 申請400電話電話價(jià)格 地圖標(biāo)注客戶付款 宜賓全自動(dòng)外呼系統(tǒng)廠家 石家莊400電話辦理公司

前言:

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

1.什么是MDL鎖

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

對于引入MDL,其主要解決了2個(gè)問題,一個(gè)是事務(wù)隔離問題,比如在可重復(fù)隔離級別下,會(huì)話A在2次查詢期間,會(huì)話B對表結(jié)構(gòu)做了修改,兩次查詢結(jié)果就會(huì)不一致,無法滿足可重復(fù)讀的要求;另外一個(gè)是數(shù)據(jù)復(fù)制的問題,比如會(huì)話A執(zhí)行了多條更新語句期間,另外一個(gè)會(huì)話B做了表結(jié)構(gòu)變更并且先提交,就會(huì)導(dǎo)致slave在重做時(shí),先重做alter,再重做update時(shí)就會(huì)出現(xiàn)復(fù)制錯(cuò)誤的現(xiàn)象。

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

注意:支持事務(wù)的InnoDB引擎表和不支持事務(wù)的MyISAM引擎表,都會(huì)出現(xiàn)Metadata Lock Wait等待現(xiàn)象。一旦出現(xiàn)Metadata Lock Wait等待現(xiàn)象,后續(xù)所有對該表的訪問都會(huì)阻塞在該等待上,導(dǎo)致連接堆積,業(yè)務(wù)受影響。

2.模擬與查找MDL鎖

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

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

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

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

# 會(huì)話1 事務(wù)中執(zhí)行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 |
+--------------+--------+----------+---------------------+---------------------+

# 會(huì)話2 對該表加字段 執(zhí)行DDL操作 發(fā)現(xiàn)DDL掛起
mysql> alter table student_tb add stu_age int after stu_name;

# 會(huì)話3 查詢所有會(huì)話 發(fā)現(xiàn)發(fā)生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          |
+----+------+-----------+--------+---------+------+---------------------------------+-------------------------------------------------------+

# 會(huì)話3 查看metadata_locks表記錄 發(fā)現(xiàn)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 |
+-------------+--------------------+----------------+-----------------------+---------------------+---------------+-------------+--------+-----------------+----------------+

# 會(huì)話3 聯(lián)合其他系統(tǒng)表 查找出會(huì)話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 |
+-------------+--------------------+----------------+-----------------------+---------------------+---------------+-------------+--------+-----------------+----------------+----------------+

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

3.如何優(yōu)化與避免MDL鎖

MDL鎖一旦發(fā)生會(huì)對業(yè)務(wù)造成極大影響,因?yàn)楹罄m(xù)所有對該表的訪問都會(huì)被阻塞,造成連接積壓。我們?nèi)粘RM量避免MDL鎖的發(fā)生,下面給出幾點(diǎn)優(yōu)化建議可供參考:

  • 開啟metadata_locks表記錄MDL鎖。
  • 設(shè)置參數(shù)lock_wait_timeout為較小值,使被阻塞端主動(dòng)停止。
  • 規(guī)范使用事務(wù),及時(shí)提交事務(wù),避免使用大事務(wù)。
  • 增強(qiáng)監(jiān)控告警,及時(shí)發(fā)現(xiàn)MDL鎖。
  • DDL操作及備份操作放在業(yè)務(wù)低峰期執(zhí)行。
  • 少用工具開啟事務(wù)進(jìn)行查詢,圖形化工具要及時(shí)關(guān)閉。

總結(jié):

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

以上就是詳細(xì)分析mysql MDL元數(shù)據(jù)鎖的詳細(xì)內(nèi)容,更多關(guān)于mysql MDL元數(shù)據(jù)鎖的資料請關(guān)注腳本之家其它相關(guān)文章!

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

標(biāo)簽:臺灣 日照 鷹潭 鎮(zhèn)江 北京 阜新 合肥 貴州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳細(xì)分析mysql MDL元數(shù)據(jù)鎖》,本文關(guān)鍵詞  詳細(xì),分析,mysql,MDL,元,數(shù)據(jù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳細(xì)分析mysql MDL元數(shù)據(jù)鎖》相關(guān)的同類信息!
  • 本頁收集關(guān)于詳細(xì)分析mysql MDL元數(shù)據(jù)鎖的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    91亚洲国产成人精品一区二区三 | 国产69精品久久久久777| 国产成人免费av在线| 欧洲一区在线电影| 国产午夜久久久久| 水野朝阳av一区二区三区| caoporn国产精品| 欧美一级在线视频| 亚洲午夜在线视频| 91婷婷韩国欧美一区二区| 2020日本不卡一区二区视频| 亚洲午夜av在线| 91一区在线观看| 欧美国产欧美综合| 狠狠色综合日日| 欧美一区二区三区免费| 亚洲一区二区免费视频| 日本高清免费不卡视频| 亚洲天堂精品视频| jlzzjlzz欧美大全| 国产色一区二区| 国产精品正在播放| 欧美精品一区男女天堂| 日韩综合在线视频| 3751色影院一区二区三区| 亚洲午夜电影在线| 精品视频一区二区不卡| 亚洲制服欧美中文字幕中文字幕| 成人性生交大片免费看视频在线| 久久久五月婷婷| 国产精品一二一区| 国产色产综合产在线视频| 国产成人精品亚洲日本在线桃色 | 国产精品丝袜一区| 国产精品亚洲一区二区三区妖精| 日韩精品一区二区三区视频播放 | 亚洲mv在线观看| 欧美伦理电影网| 日韩电影在线免费观看| 欧美一二三区在线| 久久av资源网| 国产欧美一区二区三区鸳鸯浴| 国产尤物一区二区在线| 国产精品视频九色porn| 在线免费av一区| 三级欧美韩日大片在线看| 精品乱人伦小说| 成人黄色a**站在线观看| 国产精品国产三级国产普通话三级| 99视频超级精品| 亚洲黄色在线视频| 日韩欧美中文一区二区| 国产一区二区伦理| 亚洲天堂a在线| 51午夜精品国产| 国内精品久久久久影院一蜜桃| 欧美激情综合在线| 欧美亚洲一区二区在线| 日本强好片久久久久久aaa| 久久人人爽人人爽| 日本精品一级二级| 久久精品国产亚洲a| 亚洲欧美在线高清| 91精品免费在线观看| 国产一区二区三区日韩| 亚洲精品国产第一综合99久久| 欧美一区二区三区视频| 不卡的av中国片| 日本成人超碰在线观看| 日本一区二区成人| 欧美伊人久久大香线蕉综合69| 麻豆精品一区二区| 亚洲精品亚洲人成人网| 精品国产乱码久久久久久老虎| av网站一区二区三区| 麻豆精品视频在线观看免费| 日韩伦理av电影| 26uuu精品一区二区在线观看| 一本到不卡精品视频在线观看| 麻豆国产欧美日韩综合精品二区| 亚洲欧美综合另类在线卡通| 欧美精品一区二区三区视频| 色狠狠一区二区三区香蕉| 久久er精品视频| 午夜精品福利在线| 亚洲人成影院在线观看| 国产欧美日韩卡一| 51精品久久久久久久蜜臀| 在线视频一区二区三区| 成人一道本在线| 久久不见久久见免费视频7| 亚州成人在线电影| ...xxx性欧美| 久久久精品日韩欧美| 欧美一二三四在线| 制服丝袜亚洲网站| 欧美日韩美女一区二区| 91免费观看视频在线| 国产在线一区观看| 青娱乐精品在线视频| 亚洲国产sm捆绑调教视频| 亚洲欧洲av另类| 国产精品天干天干在观线| 国产色一区二区| 国产女人18毛片水真多成人如厕 | 日本一区二区视频在线| 精品日韩一区二区三区| 欧美一区三区四区| 欧美日韩国产综合草草| 欧美三级电影一区| 欧美性欧美巨大黑白大战| 欧美在线免费播放| 色悠悠久久综合| 色偷偷久久人人79超碰人人澡| 99久久伊人久久99| 99久久久久久| 99riav一区二区三区| 91麻豆精品视频| 91亚洲精品一区二区乱码| 一本色道亚洲精品aⅴ| 色综合天天天天做夜夜夜夜做| av电影一区二区| 在线观看精品一区| 欧美日韩美女一区二区| 日韩一级完整毛片| 精品国产乱码久久久久久老虎| 久久久久久久久一| 国产精品乱人伦| 一卡二卡欧美日韩| 日韩va亚洲va欧美va久久| 久久99精品国产.久久久久久| 黑人巨大精品欧美黑白配亚洲| 国产宾馆实践打屁股91| 91蜜桃网址入口| 欧美日韩一区二区三区高清| 91精品婷婷国产综合久久竹菊| 精品久久一区二区| 国产精品国产自产拍高清av王其| 亚洲摸摸操操av| 日本不卡视频在线| 成人午夜在线播放| 欧美三级日韩三级| 久久网这里都是精品| 中文字幕乱码久久午夜不卡 | 精品国产一区二区三区av性色| 久久综合狠狠综合久久激情| 中文字幕制服丝袜一区二区三区 | 国产欧美日韩视频一区二区 | 视频在线在亚洲| 国产乱人伦精品一区二区在线观看| av在线播放一区二区三区| 欧美丝袜丝交足nylons图片| 555夜色666亚洲国产免| 国产精品久久久久久久久免费樱桃| 亚洲乱码国产乱码精品精的特点| 午夜精品久久久久久久99水蜜桃| 国模娜娜一区二区三区| 欧美亚州韩日在线看免费版国语版 | 欧美欧美欧美欧美| 国产女人水真多18毛片18精品视频| 一区二区三区四区在线免费观看 | 日韩免费视频一区二区| 亚洲人妖av一区二区| 精品一区精品二区高清| 欧美亚洲一区二区三区四区| 国产日韩欧美精品综合| 日韩中文字幕区一区有砖一区| 懂色一区二区三区免费观看| 4hu四虎永久在线影院成人| 亚洲欧洲www| 国产精品亚洲第一区在线暖暖韩国| 在线观看一区二区视频| 欧美国产日韩在线观看| 激情亚洲综合在线| 欧美日韩国产综合一区二区| 中文字幕一区二区三区精华液| 久久av老司机精品网站导航| 欧美久久婷婷综合色| 亚洲色图.com| av在线一区二区| 亚洲国产精品成人综合| 韩国v欧美v亚洲v日本v| 欧美第一区第二区| 日韩av高清在线观看| 在线精品视频一区二区| 最新热久久免费视频| 丁香婷婷综合五月| 国产视频一区不卡| 国产成人综合网| 精品国产成人在线影院| 久久成人麻豆午夜电影| 欧美一区二区三区婷婷月色| 亚洲国产成人av好男人在线观看| 色天天综合久久久久综合片| 国产精品久久久久影院老司 | 综合色天天鬼久久鬼色| 成熟亚洲日本毛茸茸凸凹| 亚洲国产精品成人综合| 成人黄动漫网站免费app| 国产亚洲欧美色|