日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

MySQL表結(jié)構(gòu)變更你不可不知的Metadata Lock詳解

2024-07-25 19:08:46
字體:
供稿:網(wǎng)友

前言

想必玩過mysql的人對(duì)Waiting for table metadata lock肯定不會(huì)陌生,一般都是進(jìn)行alter操作時(shí)被堵住了,導(dǎo)致了我們?cè)趕how processlist 時(shí),看到線程的狀態(tài)是在等metadata lock。本文會(huì)對(duì)MySQL表結(jié)構(gòu)變更的Metadata Lock進(jìn)行詳細(xì)的介紹。

在線上進(jìn)行DDL操作時(shí),相對(duì)于其可能帶來的系統(tǒng)負(fù)載,其實(shí),我們最擔(dān)心的還是MDL其可能導(dǎo)致的阻塞問題。

一旦DDL操作因獲取不到MDL被阻塞,后續(xù)其它針對(duì)該表的其它操作都會(huì)被阻塞。典型如下,如阻塞稍久的話,我們會(huì)看到Threads_running飆升,CPU告警。

mysql> show processlist;+----+-----------------+-----------+-----------+---------+------+---------------------------------+------------------------------------+| Id | User | Host | db | Command | Time | State  | Info  |+----+-----------------+-----------+-----------+---------+------+---------------------------------+------------------------------------+| 4 | event_scheduler | localhost | NULL | Daemon | 122 | Waiting on empty queue | NULL  || 9 | root | localhost | NULL | Sleep | 57 |   | NULL  || 12 | root | localhost | employees | Query | 40 | Waiting for table metadata lock | alter table slowtech.t1 add c1 int || 13 | root | localhost | employees | Query | 35 | Waiting for table metadata lock | select * from slowtech.t1 || 14 | root | localhost | employees | Query | 30 | Waiting for table metadata lock | select * from slowtech.t1 || 15 | root | localhost | employees | Query | 19 | Waiting for table metadata lock | select * from slowtech.t1 || 16 | root | localhost | employees | Query | 10 | Waiting for table metadata lock | select * from slowtech.t1 || 17 | root | localhost | employees | Query | 0 | starting  | show processlist  |+----+-----------------+-----------+-----------+---------+------+---------------------------------+------------------------------------+rows in set (0.00 sec)

如果發(fā)生在線上,無疑會(huì)影響到業(yè)務(wù)。所以,一般建議將DDL操作放到業(yè)務(wù)低峰期做,其實(shí)有兩方面的考慮,1. 避免對(duì)系統(tǒng)負(fù)載產(chǎn)生較大影響。2. 減少DDL被阻塞的概率。 

MDL引入的背景

MDL是MySQL 5.5.3引入的,主要用于解決兩個(gè)問題,

RR事務(wù)隔離級(jí)別下不可重復(fù)讀的問題

如下所示,演示環(huán)境,MySQL 5.5.0。

session1> begin;Query OK, 0 rows affected (0.00 sec)session1> select * from t1;+------+------+| id | name |+------+------+| 1 | a || 2 | b |+------+------+rows in set (0.00 sec)session2> alter table t1 add c1 int;Query OK, 2 rows affected (0.02 sec)Records: 2 Duplicates: 0 Warnings: 0session1> select * from t1;Empty set (0.00 sec)session1> commit;Query OK, 0 rows affected (0.00 sec)session1> select * from t1;+------+------+------+| id | name | c1 |+------+------+------+| 1 | a | NULL || 2 | b | NULL |+------+------+------+rows in set (0.00 sec)

可以看到,雖然是RR隔離級(jí)別,但在開啟事務(wù)的情況下,第二次查詢卻沒有結(jié)果。

主從復(fù)制問題

包括主從數(shù)據(jù)不一致,主從復(fù)制中斷等。

如下面的主從數(shù)據(jù)不一致。

session1> create table t1(id int,name varchar(10)) engine=innodb;Query OK, 0 rows affected (0.00 sec)session1> begin;Query OK, 0 rows affected (0.00 sec)session1> insert into t1 values(1,'a');Query OK, 1 row affected (0.00 sec)session2> truncate table t1;Query OK, 0 rows affected (0.46 sec)session1> commit;Query OK, 0 rows affected (0.35 sec)session1> select * from t1;Empty set (0.00 sec)

再來看看從庫的結(jié)果

session1> select * from slowtech.t1;+------+------+------+| id | name | c1 |+------+------+------+| 1 | a | NULL |+------+------+------+row in set (0.00 sec)

看看binlog的內(nèi)容,可以看到,truncate操作記錄在前,insert操作記錄在后。

# at 7140#180714 19:32:14 server id 1 end_log_pos 7261 Query thread_id=31 exec_time=0 error_code=0SET TIMESTAMP=1531567934/*!*/;create table t1(id int,name varchar(10)) engine=innodb/*!*/;# at 7261#180714 19:32:30 server id 1 end_log_pos 7333 Query thread_id=32 exec_time=0 error_code=0SET TIMESTAMP=1531567950/*!*/;BEGIN/*!*/;# at 7333#180714 19:32:30 server id 1 end_log_pos 7417 Query thread_id=32 exec_time=0 error_code=0SET TIMESTAMP=1531567950/*!*/;truncate table t1/*!*/;# at 7417#180714 19:32:30 server id 1 end_log_pos 7444 Xid = 422COMMIT/*!*/;# at 7444#180714 19:32:34 server id 1 end_log_pos 7516 Query thread_id=31 exec_time=0 error_code=0SET TIMESTAMP=1531567954/*!*/;BEGIN/*!*/;# at 7516#180714 19:32:24 server id 1 end_log_pos 7611 Query thread_id=31 exec_time=0 error_code=0SET TIMESTAMP=1531567944/*!*/;insert into t1 values(1,'a')/*!*/;# at 7611#180714 19:32:34 server id 1 end_log_pos 7638 Xid = 421COMMIT/*!*/;

如果會(huì)話2執(zhí)行的是drop table操作,還會(huì)導(dǎo)致主從中斷。

有意思的是,如果會(huì)話2執(zhí)行的是alter table操作,其依舊會(huì)被阻塞,阻塞時(shí)間受innodb_lock_wait_timeout參數(shù)限制。

mysql> show processlist;+----+------+-----------+----------+---------+------+-------------------+---------------------------+| Id | User | Host | db | Command | Time | State  | Info   |+----+------+-----------+----------+---------+------+-------------------+---------------------------+| 54 | root | localhost | NULL | Query | 0 | NULL  | show processlist  || 58 | root | localhost | slowtech | Sleep | 1062 |   | NULL   || 60 | root | localhost | slowtech | Query | 11 | copy to tmp table | alter table t1 add c1 int |+----+------+-----------+----------+---------+------+-------------------+---------------------------+rows in set (0.00 sec)

MDL的基本概念

首先,看看官方的說法,

To ensure transaction serializability, the server must not permit one session to perform a data definition language (DDL) statement on a table that is used in an uncompleted explicitly or implicitly started transaction in another session.

The server achieves this by acquiring metadata locks on tables used within a transaction and deferring release of those locks until the transaction ends.

A metadata lock on a table prevents changes to the table's structure.

This locking approach has the implication that a table that is being used by a transaction within one session cannot be used in DDL statements by other sessions until the transaction ends.

從上面的描述可以看到,

1. MDL出現(xiàn)的初衷就是為了保護(hù)一個(gè)處于事務(wù)中的表的結(jié)構(gòu)不被修改。

2. 這里提到的事務(wù)包括兩類,顯式事務(wù)和AC-NL-RO(auto-commit non-locking read-only)事務(wù)。顯式事務(wù)包括兩類:1. 關(guān)閉AutoCommit下的操作,2. 以begin或start transaction開始的操作。AC-NL-RO可理解為AutoCommit開啟下的select操作。

3. MDL是事務(wù)級(jí)別的,只有在事務(wù)結(jié)束后才會(huì)釋放。在此之前,其實(shí)也有類似的保護(hù)機(jī)制,只不過是語句級(jí)別的。

需要注意的是,MDL不僅僅適用于表,同樣也適用于其它對(duì)象,如下表所示,其中,"等待狀態(tài)"對(duì)應(yīng)的是"show processlist"中的State。

MySQL,表結(jié)構(gòu),Metadata,Lock

為了提高數(shù)據(jù)庫的并發(fā)度,MDL被細(xì)分為了11種類型。

  • MDL_INTENTION_EXCLUSIVE
  • MDL_SHARED
  • MDL_SHARED_HIGH_PRIO
  • MDL_SHARED_READ
  • MDL_SHARED_WRITE
  • MDL_SHARED_WRITE_LOW_PRIO
  • MDL_SHARED_UPGRADABLE
  • MDL_SHARED_READ_ONLY
  • MDL_SHARED_NO_WRITE
  • MDL_SHARED_NO_READ_WRITE
  • MDL_EXCLUSIVE

常用的有MDL_SHARED_READ,MDL_SHARE D_WRITE及MDL_EXCLUSIVE,其分別用于SELECT操作,DML操作及DDL操作。其它類型的對(duì)應(yīng)操作可參考源碼sql/mdl.h。

對(duì)于MDL_EXCLUSIVE,官方的解釋是,

/*
An exclusive metadata lock.
A connection holding this lock can modify both table's metadata and data.
No other type of metadata lock can be granted while this lock is held.
To be used for CREATE/DROP/RENAME TABLE statements and for execution of
certain phases of other DDL statements.
*/

簡(jiǎn)而言之,MDL_EXCLUSIVE是獨(dú)占鎖,在其持有期間是不允許其它類型的MDL被授予,自然也包括SELECT和DML操作。

這也就是為什么DDL操作被阻塞時(shí),后續(xù)其它操作也會(huì)被阻塞。

關(guān)于MDL的補(bǔ)充

1. MDL的最大等待時(shí)間由lock_wait_timeout參數(shù)決定,其默認(rèn)值為31536000(365天)。在使用工具進(jìn)行DDL操作時(shí),這個(gè)值就不太合理。事實(shí)上,pt-online-schema-change和gh-ost對(duì)其就進(jìn)行了相應(yīng)的調(diào)整,其中,前者60s,后者3s。

2. 如果一個(gè)SQL語法上有效,但執(zhí)行時(shí)報(bào)錯(cuò),如,列名不存在,其同樣會(huì)獲取MDL鎖,直到事務(wù)結(jié)束才釋放。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)VeVb武林網(wǎng)的支持。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到MYSQL教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
免费国产成人看片在线| 偷窥国产亚洲免费视频| 欧美日韩久久久| 久久久99久久| www.xxxx精品| 欧美日韩国产中字| 日韩在线播放一区二区| 精品综合久久久久| a在线观看免费视频| 国产成人中文字幕| 香蕉av一区| 日韩欧美一级视频| 国产欧美日韩不卡免费| 亚洲一区在线观看免费| 一区二区日韩av| 国产一卡2卡3卡免费网站| 欧美日韩国产综合网| 国产一级免费| 亚洲一级特黄| 日韩中文字幕网| 国产欧美一级| 日韩精品在线网站| 日韩精品综合在线| 高清在线一区| 亚洲国产欧美日韩精品| 欧美日韩综合在线观看| 国产欧美中文字幕| 亚洲永久字幕| www.久久久精品| 中文在线视频观看| 中文 欧美 日韩| 欧美日韩一级黄| 天堂在线视频中文网| 偷窥国产亚洲免费视频| www.狠狠干| 国产日韩免费| 一区二区不卡在线| 日韩在线视频免费观看| 最近中文字幕在线中文视频| av午夜在线| 欧美久久久精品| 一级日本免费的| 婷婷中文字幕在线观看| 婷婷久久综合九色国产成人| 国产在线拍偷自揄拍精品| 国产偷国产偷亚洲清高网站| 中文字幕第一页在线播放| 国产日韩中文字幕在线| 国产裸舞福利在线视频合集| 欧美日韩精品不卡| 国产一卡2卡3卡免费网站| 最近中文字幕在线中文视频| 欧美在线视频第一页| 中文av字幕一区| 精品欧美久久久| 国产免费永久在线观看| 成人精品视频一区| 欧美日韩尤物久久| 精品国产1区2区3区| 亚洲深夜福利| 日韩午夜黄色| 又黄又www的网站| 国产91欧美| 一区二区三区在线|网站| 蜜臀久久精品| 91精品久久久久久久久| 91精品高清| 国产自产视频| 欧美亚洲国产日韩| 国产乱一区二区| 中文字幕精品在线视频| 久久精品国产99| 精品中文字幕在线播放| 中文字幕精品一区二| 日韩av一区二区在线| 精品乱人伦一区二区三区| 精品国产99| 亚洲第一中文字幕在线观看| 欧美亚洲视频在线看网址| wwwww亚洲| 日韩视频一区| 中文字幕亚洲高清| 日韩 欧美 亚洲| 最新中文字幕在线| 欧美另类专区| 日韩网站中文字幕| 亚洲开心激情| 国产一区久久久| 日本国产在线视频| 久久久久久91| 国产真实乱子伦精品视频| 国产亚洲二区| 欧美性生交大片免费| 欧美日韩国产第一页| 粉嫩喷白浆久久| 一级片在线免费看| 亚洲综合欧美在线| 中文字幕一区不卡| 国产亚洲人成a一在线v站| 国产高清在线一区| 在线日韩中文| 欧美日韩中文字幕精品| 日韩欧美中文字幕在线播放| 91精品免费看| 91精品国产综合久久久久| 亚洲制服丝袜一区| 国产日韩精品在线| 亚洲三级网站| 亚洲欧美99| 日韩欧美99| 精品欧美日韩在线| 精品国产综合久久| 欧美亚洲另类制服自拍| 91精品国产综合久久蜜臀| 一区二区三区精品久久久| 欧美亚洲专区| 在线一区免费| 亚洲午夜av| 久久人人88| 亚洲一区中文在线| 91精品久久久久久蜜臀| 日韩在线一区二区视频| 日韩视频精品在线观看| 中文字幕在线导航| 一区二区三区中文字幕在线观看| 国内激情久久| 色综合婷婷久久| 伊人www22综合色| 日韩视频不卡中文| 日韩欧美中文字幕视频| 91精品高清| 日韩一级在线免费观看| 日韩在线精品视频| av中文资源在线| 91精品国产综合久久精品| 国产在线欧美日韩| 国产一区深夜福利| 日韩午夜一区| 日韩你懂的电影在线观看| 久久婷婷国产| 日韩精品在线视频观看| 中文网丁香综合网| 不卡中文一二三区| 一区三区二区视频| 日韩欧美在线视频日韩欧美在线视频| 国产在线一在线二| 91精品国产91综合久久蜜臀| 日韩一级免费在线观看| 日本亚洲欧美| 亚洲视频电影在线| 黄色片免费在线| 精品国产免费视频| 91久久久精品国产| 91亚洲国产高清| 欧美日韩精品欧美日韩精品一| 久精品在线观看| 国产福利一区二区精品秒拍| 在线亚洲人成| 国产福利一区在线观看| 国产黄在线观看| 日韩精品在线观| av中文在线资源| 日韩一级精品| 九七久久人人| 日韩在线观看视频一区二区| 欧美日韩国产中文| 精品一二三区| 欧美日韩中文字幕日韩欧美| 日韩中文字幕综合| 精品国内自产拍在线视频| 国产偷国产偷亚洲清高网站| 欧美在线视频一区二区| 精品国产免费观看一区| www.xxxx精品| 在线视频你懂得一区| 国产欧美日韩在线播放| 日韩午夜黄色| 日韩久久精品视频| 欧美高清一区| 第一页在线观看| 中文字幕欧美日韩精品| 国产高清精品在线| 韩国av一区二区| 日韩精品在线视频观看| 欧美日韩在线网站| 久久久91精品国产| 国产亚洲欧美中文| 最近高清中文在线字幕在线观看1| 日韩高清在线不卡| 日韩激情一区| 精品福利二区三区| 日韩国产高清一区| 日本亚洲欧美三级| 红桃视频亚洲| 国产视频中文字幕在线观看| 欧美性生交大片免费| 日韩欧美专区在线| 欧美,日韩,国产在线| 精品成人久久av| 久久久精品国产99久久精品芒果| 欧美日韩国产综合视频在线观看| 日韩欧美国产片| 欧美日韩中文精品| 久久久99久久精品欧美 | 精品人妻一区二区三区视频| 91欧美日韩麻豆精品| 日韩精品欧美在线| 亚洲午夜av| 九九九精品视频| 欧美日韩国产一二| 国产一区不卡精品| 欧美国产日韩在线播放| 国产日韩在线亚洲字幕中文| 不卡视频一区二区| 国产欧美日韩精品综合| 国产区高清在线| 国产一级在线免费观看| 日韩亚洲欧美中文字幕| 欧美日韩国产免费观看视频| 国产乱国产乱300精品| 91精品国产91综合久久蜜臀| 91精品在线观看国产| 亚洲欧美日本另类| 国产高清一级片| 国产三级视频在线| 亚洲大胆人体av| 欧美日韩国产高清| 一区二区三区在线不卡| 久久婷婷亚洲| 久久中文精品| 国产欧美日韩亚州综合| 在线国产1区| 亚洲成av人片一区二区密柚| 中文字幕一区免费| 国产日韩av一区| 欧美日韩精品国产| 国产主播中文字幕| 欧美一级在线免费| 亚洲a级在线播放观看| 日韩欧美在线综合网| 日韩在线视频精品| 精品综合久久久久| 国产欧美日韩亚州综合| 国产拍揄自揄精品视频麻豆| 国产亚洲欧美中文| 亚洲一区在线观看视频| 亚洲第一视频| 欧美日韩国产亚洲一区| 国产主播中文字幕| 日本中文字幕在线观看| 国产网站欧美日韩免费精品在线观看| 一区二区日韩免费看| 欧美一级免费在线观看| 日韩欧美国产网站| 国产日韩精品在线观看| 国产黄色高清在线| 欧美日韩国产在线播放| 欧美日韩在线视频一区| 成人禁用看黄a在线| 日韩欧美一二三四区| 99精品999| 欧美三级日韩三级| 色www精品视频在线观看| 亚洲精品中文字幕乱码三区不卡| 欧美国产日韩综合| 不卡在线视频| 亚洲.国产.中文慕字在线| 日韩在线观看一区| 国产欧美久久久| 日韩三级一区二区| 国产中文在线播放| 国产三级做爰在线观看| 中文字幕 亚洲一区| 日韩欧美一二三区| 久久99精品久久久| 二区视频在线观看| 伊人精品视频| 日本中文字幕在线观看| 中文字幕在线观看精品| 日本国产一区| 欧美激情一区二区在线| 中文字幕亚洲视频| 国产欧美在线观看| 亚洲欧美视频一区二区三区| 日韩视频在线一区| 国产香蕉精品视频| 日本国产一区| 一区二区三区精品久久久| 日韩专区视频网站| 国内精品99| 日韩视频免费直播| 亚洲国产欧美久久| 国产一卡2卡3卡免费网站| 日韩亚洲欧美中文在线| 精品国产999| 中文字幕成人乱码在线电影| 中文在线中文字幕| 影音先锋中文字幕在线观看| 日韩三级免费观看| 中文字幕在线观看欧美| 日韩国产一区三区| 欧美一级免费在线观看| 国产亚洲欧美色| 不卡一区2区| 一区二区视频在线| 久久久精品99| 亚洲专区一区| 中文字幕五月天| 黄色片免费在线| 色猫猫国产区一区二在线视频 | 欧美国产一级| 亚洲va韩国va欧美va精品| 亚洲理论中文字幕| 日韩在线a电影| 亚洲高清在线免费| 欧美日韩在线观看成人| 日韩av一区在线| 69堂精品视频在线播放| 日韩精品欧美| 欧美 日韩 国产 高清| 国产日韩中文在线| 欧美日韩久久不卡| 精品国产乱码一区二区| 91蜜桃婷婷狠狠久久综合9色| 91精品久久久久久久久久入口| 国产午夜精品全部视频播放| 欧美性生交大片免费| 国产裸体歌舞团一区二区| 欧美日韩中文字幕视频| 欧美片网站免费| 国产在线高潮| 久久av免费| www日韩欧美| 亚洲国产欧美91| 亚洲一级影院| 国产高清不卡av| 国产在线中文字幕| 国产福利第一页| √天堂资源中文www| 亚洲尤物av| 在线一区免费| 精品视频1区2区3区| 亚洲一区在线观看免费| 久久精品免费在线观看| 中文字幕在线视频精品| 精品国产免费观看一区| 国产日产一区二区三区 | 亚洲成av人片在线| 久久精品国产成人一区二区三区| 91av久久久| 日韩亚洲不卡在线| 国产黄色在线播放| 国产69精品久久久久孕妇国产69久久 | 国产久卡久卡久卡久卡视频精品| 精品视频三区| 中文字幕 亚洲视频| 精品一二三四| 日韩午夜高潮| aa国产成人| 在线观看91精品国产入口| 国产一卡2卡3卡四卡网站| 又黄又www的网站| 国产乱码午夜在线视频| 久草视频观看| 一区二区三区精品99久久| 欧美一级免费看| 91精品久久久久久久91蜜桃| 日韩视频精品在线观看| 日韩欧美一级视频| 韩国av一区二区| 国产三级在线观看视频| 国产亚洲污的网站| 日韩 欧美 亚洲| 日韩精品在线私人| 日韩欧美中文第一页| 日韩一级免费视频| 亚洲一区中文在线| 99久久精品国产亚洲| 激情婷婷亚洲| 99国产成 人 综合 亚洲欧美| 亚洲图片小说综合| 在线三级av| 蜜桃精品视频| 日韩1区在线| 国产成人精品综合久久久| 欧美变态tickling挠脚心| 中文字幕第一页在线| 国产一区精品| 久久久久久欧美| 欧美国产日韩在线播放| 亚洲高清中文字幕| 亚洲一区在线观看网站| 日韩在线观看一区| av中文在线播放| 亚洲福利精品| 日韩欧美资源站| 在线中文字幕视频| 日本黄色一区二区| 欧洲一级精品| 亚洲一区在线观看视频|