MySQL 5.6 drop database時,table metadata lock等待
一個線下庫環境,開發人員不提交DML和查詢事務,導致drop database時,遭遇表的metadata lock(MDL)等待,而不是SCHEMA上。
即會看到 “Waiting for table metadata lock”,而不是”Waiting for schema metadata lock”。這是為什麼呢?
經過原始碼分析,原因如下。
我們知道:
select 語句在操作時,需要對錶物件持有MDL_SHARED_READ鎖。
而DML語句在操作時,需要對錶物件持有MDL_SHARED_WRITE鎖。但都不需要SCHEMA級別metadata lock鎖。
另外drop database 時,需要依次獲取以下MDL鎖:
1) MDL_INTENSION_EXCLUSIVE(GLOBAL),STATEMENT 級別
2) MDL_EXCLUSIVE(SCHEMA),TRANSACTION級別
3) MDL_EXCLUSIVE (TABLE),TRANSACTION級別。在此database下的每個物件,需要MDL_EXCLUSIVE鎖。
那麼原因就非常明顯了:
這是因為查詢或者DML一張表時,只會獲取這個表的MDL_SHARED_READ或者MDL_SHARED_WRITE鎖;
而drop database 時,會按以上流程獲取相關鎖,因此只在第三步有衝突,前面兩步不會有衝突。
示例如下:
1. 起查詢事務
2. 刪除資料庫,此時當前會話hang住。
3. Show processlist結果,看到有”Waiting for table metadata lock”。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30088583/viewspace-1451772/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL 5.6 metadata lock 原始碼解讀MySql原始碼
- MySQL新增索引偶遇waiting for table metadata lockMySql索引AI
- MySQL DDL Waiting for table metadata lock 解決MySqlAI
- Waiting for table metadata lockAI
- create table if not exists Waiting for table metadata lockAI
- flashback drop/query/table/database/archiveDatabaseHive
- 【Mysql】metadata lock鎖MySql
- MYSQL 鎖:metadata lockMySql
- enable table lock 的enqueue等待ENQ
- 【MySQL】MetaData Lock 之一MySql
- 【MySQL】MetaData Lock 之二MySql
- 【MySQL】MetaData Lock 之三MySql
- mysql觀測METADATA LOCK(MDL)鎖MySql
- mysql metadata lock原理與實現MySql
- create table of mysql databaseMySqlDatabase
- MySQL 5.6 Table cache 簡介MySql
- MySQL 5.6 global read lock 介紹MySql
- MySQL5.6 create table原理分析MySql
- 【MySQL】select for update 的Row Lock 與Table LockMySql
- 【MySQL】5.6.x InnoDB Error Table mysql.innodb_table_stats not foundMySqlError
- Drop DatabaseDatabase
- v$lock之alter table drop column與alter table set unused column區別系列五
- MySQL資料災難挽救之drop tableMySql
- MySQL 5.5 -- innodb_lock_wait 鎖 等待MySqlAI
- Database Object Metadata (272)DatabaseObject
- 6、MySQL刪除資料庫(DROP DATABASE語句)MySql資料庫Database
- mysql metadata lock後設資料鎖之鎖狀態lock_status流轉圖MySql
- MYSQL METADATA LOCK(MDL LOCK)學習(1) 理論知識和加鎖型別測試MySql型別
- drop table和truncate table的區別
- How To Efficiently Drop A Table With Many Extents
- oracle 誤刪表 drop tableOracle
- MySQL DROP TABLE刪除表報錯'ERROR 1051 (42S02): Unknown table'MySqlError
- How to drop Oracle RAC database manually?OracleDatabase
- alter database drop datafile 與 drop tablespace file 的區別Database
- MySQL表結構變更引起的Metadata Lock|如何定位DDL被阻塞MySql
- MYSQL 5.6 安裝時cmake引數MySql
- 等待事件之Row Cache Lock事件
- LIBRARY CACHE LOCK 等待事件事件