日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

詳細分析mysql MDL元數據鎖

瀏覽:31日期:2023-10-13 14:33:05

前言:

當你在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_instrumentsSET 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 聯合其他系統表 查找出會話IDmysql> 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 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
一区二区国产精品| 国产毛片久久久| 久久久精品日韩| 深夜福利视频一区二区| 日本一区二区高清不卡| 国产不卡av一区二区| 日本一区二区免费高清| 精品一区二区三区四区五区| 国产精品扒开腿做爽爽爽软件| 伊人久久大香伊蕉在人线观看热v| 香蕉成人久久| 日本午夜精品视频在线观看| 日韩和欧美一区二区| 亚洲aa在线| 日韩av不卡一区二区| 国产激情一区| 精品欠久久久中文字幕加勒比| 国产一区二区三区91| 天堂中文av在线资源库| 久久中文视频| 亚洲一区观看| 日韩久久一区| 精品国产一区二区三区2021| 精品久久网站| 国产理论在线| 欧美日韩一二三四| 日韩视频中文| 91精品麻豆| 国内一区二区三区| 婷婷综合六月| 首页国产欧美久久| 久久国产尿小便嘘嘘| 欧美xxxx中国| 精品高清久久| 国产精品嫩草99av在线| 日韩欧美中文字幕在线视频| 麻豆精品在线观看| 久久久久国产精品一区三寸| 亚洲一区成人| 国产精品日本一区二区不卡视频 | 日韩大片在线播放| 在线国产一区二区| 欧美精品观看| 久久精品青草| 日韩成人在线看| 播放一区二区| 日韩国产在线不卡视频| 国产精品久久久久久久久妇女| 九九在线精品| 欧美日韩亚洲一区三区| 国产精品伦理久久久久久| 亚洲免费中文| 水蜜桃久久夜色精品一区| 蜜臀av性久久久久蜜臀aⅴ四虎 | 天堂精品久久久久| 国产一区二区三区视频在线| 亚洲欧美成人综合| 精品国产精品久久一区免费式 | 亚洲精品乱码久久久久久蜜桃麻豆| 国产毛片精品| 在线国产一区| 国产一区二区三区91| 免费观看在线色综合| 麻豆视频在线观看免费网站黄 | 久久国内精品自在自线400部| 国产在线|日韩| 国产美女撒尿一区二区| 亚洲欧洲一区| 美女视频免费精品| 久久国产66| 久久精品午夜| 亚洲精品一二| 亚洲福利专区| 精品欧美视频| 欧美日韩亚洲一区在线观看| 亚洲激情社区| 91av亚洲| 国产精品香蕉| 免费看黄色91| 不卡一区综合视频| 天堂√中文最新版在线| 国产精品一区二区三区美女| 石原莉奈在线亚洲三区| 岛国av免费在线观看| 国产精品网在线观看| 亚洲免费福利一区| 国产一区91| 狠狠操综合网| 久久久久久久久久久妇女| 精品久久99| 国产精品v亚洲精品v日韩精品| 制服诱惑一区二区| 99精品电影| 国产欧洲在线| 久久精品九色| 国产乱码精品一区二区三区亚洲人| 中文日韩欧美| 不卡av一区二区| 久久天堂av| 国产欧美一区二区三区精品酒店| 久久av免费| 欧美亚洲免费| 亚洲精品九九| 免费观看在线综合色| 91久久国产| 久久国产电影| 色爱综合av| 亚洲国产福利| 国产一区二区精品福利地址| 美日韩一区二区三区| 欧美日韩一区二区三区在线电影| 亚洲精品成人一区| 中文字幕乱码亚洲无线精品一区| 不卡在线一区二区| 国产一区二区三区自拍| 久久九九精品| 91精品亚洲| 蜜桃精品在线| 日韩视频网站在线观看| 日韩国产一区二区| av资源中文在线天堂| 日韩在线视频精品| 日本久久成人网| 播放一区二区| 精品一区在线| 午夜在线一区| 一区二区三区网站| 视频一区中文字幕精品| 日韩一区精品字幕| 免费成人在线视频观看| 日韩一区二区三区免费视频 | 久久国产人妖系列| 国产精品白浆| 国产精品99一区二区三| 欧美成人精品三级网站| 国产韩日影视精品| 久久亚洲国产精品一区二区| 色8久久久久| 国产精品白丝一区二区三区| 精品成人18| 亚洲天堂成人| 视频在线在亚洲| 日本国产欧美| 国产精品久久久久77777丨| 欧美成人一二区| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 日韩毛片网站| 国产精品啊啊啊| 日韩精品诱惑一区?区三区| a日韩av网址| 自由日本语亚洲人高潮| 亚洲ww精品| 麻豆一区二区在线| 另类中文字幕国产精品| 久久xxxx| 欧美xxxx性| 亚洲福利免费| 青草国产精品| 国产在线观看www| 欧美综合国产| 欧美91在线|欧美| 欧美日韩国产在线一区| 日本午夜精品一区二区三区电影| 麻豆中文一区二区| 日韩免费福利视频| 五月天激情综合网| 日韩精品亚洲专区在线观看| 精品亚洲成人| 国产亚洲精品v| 欧美精品97| 偷拍欧美精品| 国产高清日韩| 免费成人网www| 青草综合视频| 高清av一区二区三区| 五月国产精品| 亚洲天堂免费电影| 伊人久久一区| 正在播放日韩精品| 六月丁香综合| 九九九精品视频| 一区在线免费观看| 美女久久精品| 鲁大师影院一区二区三区| 国产精品白丝久久av网站| 激情久久五月| 国产欧美精品| 国产精品日本| 精品国产乱码久久久| 奶水喷射视频一区| 成人国产精品久久| 亚洲理论在线| 成人羞羞视频播放网站| 国产亚洲电影| 伊人久久亚洲美女图片| 麻豆视频一区二区| 丝袜a∨在线一区二区三区不卡| 精品亚洲成人| 婷婷综合福利| 久久精品99久久无色码中文字幕|