MySQL新增索引偶遇waiting for table metadata lock
今天抽時間把前段時間出現的故障進行梳理。
8月5日晚對某生產庫相關表加索引
alter table user_address add index idx_create_time(create_time);
主庫正常新增完畢,觀察到從庫出現較高的延遲,show processlist檢視各個執行緒狀態,發現出現大批量的Waiting for table metadata lock
由於是第一次遇到,所以上網查 metadata lock(MDL)的相關資訊。
select * from information_schema.innodb_trx\G
看到有個對user_address表的訪問一直沒有結束
根據經驗判斷這是一個異常的SQL,於是kill掉這個執行緒
然後show processlist:
Waiting for table metadata lock全部消失,並且show slave status \G延遲逐漸降低並消失。
經查閱資料:
1)MySQL5.6之後的版本支援online DDL,建立索引本身不會對錶的增刪改查造成影響,但是由於獲取不到MDL(後設資料鎖),從庫進行索引建立的session就會一直處於Waiting for table metadata lock狀態,導致後續對此表的訪問造成影響。
2)後期操作alter table,可以通過提前檢查information_schema.innodb_trx的事務提交情況,以避免此類情況發生。
參考文件:
https://www.cnblogs.com/digdeep/p/4892953.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30135314/viewspace-2654508/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL DDL Waiting for table metadata lock 解決MySqlAI
- MySQL:Analyze table導致'waiting for table flush'MySqlAI
- MySQL5.7 Waiting FOR TABLE FLUSHMySqlAI
- MySQL5.7 Waiting for global read lockMySqlAI
- mysql觀測METADATA LOCK(MDL)鎖MySql
- MySQL:簡單記錄一下Waiting for commit lockMySqlAIMIT
- 【mysql】table中新增列MySql
- mysql metadata lock後設資料鎖之鎖狀態lock_status流轉圖MySql
- ORA-04021: timeout occurred while waiting to lock objectWhileAIObject
- MySQL表結構變更引起的Metadata Lock|如何定位DDL被阻塞MySql
- MySQL哪些情況需要新增索引?MySql索引
- yum 提示 Another App is currently holding the yum lock; waiting for it to exit...APPAI
- [20190522]DISABLE TABLE LOCK.txt
- 偶遇
- [20190524]DISABLE TABLE LOCK(12c).txt
- [20190530]DISABLE TABLE LOCK(10g).txt
- GaussDB資料庫SQL系列-LOCK TABLE資料庫SQL
- mysql 新增時,唯一索引衝突時更新MySql索引
- mysql lock操作MySql
- 當匯入flutter專案時,報Waiting for another flutter command to release the startup lockFlutterAI
- MySQL8.0 binlog_row_metadataMySql
- MySQL:理解MDL LockMySql
- MySQL Cases-記錄大量waiting for handler commitMySqlAIMIT
- mysql innodb lock鎖之record lock之一MySql
- vue 商品sku新增,笛卡爾演算法,商品新增。動態生成table,table新增值後 再生成的table 不改變table之前輸入的值Vue演算法
- XamarinSQLite教程新增索引SQLite索引
- 技術分享 | MySQL 大表新增唯一索引的總結MySql索引
- mysql佔用CPU過高的解決辦法(新增索引)MySql索引
- mysql索引之字首索引MySql索引
- ElasticSearch 索引 VS MySQL 索引Elasticsearch索引MySql
- mysql索引MySql索引
- [Mysql]索引MySql索引
- MySQL 索引MySql索引
- MySQL — 索引MySql索引
- MySQL table into a golang strucMySqlGolang
- MySQL:Innodb 讓MDL LOCK和ROW LOCK 記錄到errlogMySql
- MySQL索引系列:全文索引MySql索引
- MySQL 字串索引和字首索引MySql字串索引