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新增索引偶遇waiting for table metadata lockMySql索引AI
- MySQL DDL Waiting for table metadata lock 解決MySqlAI
- mysql觀測METADATA LOCK(MDL)鎖MySql
- MySQL5.6 create table原理分析MySql
- MySQL資料災難挽救之drop tableMySql
- 6、MySQL刪除資料庫(DROP DATABASE語句)MySql資料庫Database
- mysql5.6在匯入時報innodb_table_stats不存在MySql
- mysql metadata lock後設資料鎖之鎖狀態lock_status流轉圖MySql
- drop apply INSTANTIATION for one tableAPP
- create table,show tables,describe table,DROP TABLE,ALTER TABLE ,怎麼使用?
- MySQL表結構變更引起的Metadata Lock|如何定位DDL被阻塞MySql
- alter table drop unused columns checkpoint
- PostgreSQL DBA(138) - PG 13(Drop database force)SQLDatabase
- latch:library cache lock等待事件事件
- LightDB/PostgreSQL等待事件 Lock transactionidSQL事件
- [20190522]DISABLE TABLE LOCK.txt
- 等待事件enq: TX - row lock contention事件ENQ
- 深入解析 oracle drop table內部原理Oracle
- Cell smart table scan等待事件事件
- Lock物件Condition介面實現等待/通知物件
- Kettle: pentaho-server-ce-9.4 : ERROR [SchemaUpdate] could not get database metadataServerErrorDatabase
- mysql執行truncate drop 時卡死問題解決MySql
- [20190524]DISABLE TABLE LOCK(12c).txt
- [20190530]DISABLE TABLE LOCK(10g).txt
- GaussDB資料庫SQL系列-LOCK TABLE資料庫SQL
- 【TUNE_ORACLE】等待事件之“library cache lock”Oracle事件
- android.database.sqlite.SQLiteException: no such table錯誤AndroidDatabaseSQLiteException
- 當刪除oracle資料庫user時發生row cache lock 等待事件Oracle資料庫事件
- mysql lock操作MySql
- [20181203]drop table後如何獲得表結構.txt
- MySQL8.0 binlog_row_metadataMySql
- MySQL:5.6 升級 5.7MySql
- CentOS 安裝 mysql 5.6CentOSMySql
- Windows 安裝 MySQL 5.6WindowsMySql
- MySQL:理解MDL LockMySql
- mysql innodb lock鎖之record lock之一MySql
- oracle drop table purge無備份bbed恢復(3/3)Oracle
- oracle drop table purge無備份bbed恢復(1/3)Oracle
- oracle drop table purge無備份bbed恢復(2/3)Oracle