【MySQL】MySQL中如何定位DDL被阻塞的问题
2022-06-24 22:47 abce 阅读(156) 评论(0) 编辑 收藏 举报1.查看DDL阻塞
查看DDL操作对应的状态
1 | show processlist; |
2.(MySQL5.6)定位哪些会话阻塞了DDL操作
1 | select * from information_schema.innodb_trx; |
1 2 3 4 5 6 7 8 9 10 11 12 | SELECT concat( 'kill ' , i.trx_mysql_thread_id, ';' ) FROM information_schema.innodb_trx i, ( SELECT MAX ( time ) AS max_time FROM information_schema.processlist WHERE state = 'Waiting for table metadata lock' AND (info LIKE 'alter%' OR info LIKE 'create%' OR info LIKE 'drop%' OR info LIKE 'truncate%' OR info LIKE 'rename%' )) p WHERE timestampdiff( second , i.trx_started, now()) > p.max_time; |
3.(MySQL5.7)定位哪些会话阻塞了DDL操作
1 | select * from sys.schema_table_lock_waits; |
重点关注列:blocking_lock_type
定位出需要Kill的会话。
1 2 3 4 5 6 7 | SELECT sql_kill_blocking_connection FROM sys.schema_table_lock_waits WHERE blocking_lock_type <> 'SHARED_UPGRADABLE' AND waiting_query = 'alter table xxx' ; |
不过,sys.schema_table_lock_waits表是MySQL 5.7引入的,会显示MDL的相关信息,包括作用对象、锁的类型及锁的状态等。必须首先开启MDL相关的instrument。但在MySQL 5.7中,默认关闭;MySQL 8.0才默认开启。 查看是否开启:
1 | mysql> select * from performance_schema.setup_instruments where name = 'wait/lock/metadata/sql/mdl' ; |
临时开启:
1 2 | UPDATE performance_schema.setup_instruments SET ENABLED = 'YES' , TIMED = 'YES' WHERE NAME = 'wait/lock/metadata/sql/mdl' ; |
永久生效:
1 2 | [mysqld] performance- schema -instrument= 'wait/lock/metadata/sql/mdl=ON' |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2016-06-24 oracle开启numa的支持
2015-06-24 Redo丢失场景和处理方法