MySQL 执行DDL语句 hang住了怎么办?


首先,我们查看主机负载信息,通过下图我们可以看到,主机基本处于空载状态,毫无压力
然后,我们查看数据库的活跃会话数量及其状态,我们可以看到数据库中并没有大量会话,也不存在正在执行的DML语句在操作表sbtest1,也不存在同时有其他会话同时使用DDL在操作相同的表,但这里无法确认是否存在未提交的事务先查看information_schema中记录的事务信息查看performance_schema下的handle持有信息通过show engine innodb status查看下锁与事务信息排查到这里,视乎已经没招了,也许我们还可以用mysqladmin debug命令试试看等等,我们好像忽略了点什么,既然DDL语句在等待MDL元数据锁,为啥在performance_schema.metadata_locks表中没有记录?查看一下MDL事件采集器试试看?然后,我们重新查询information_schema下的事务和锁信息查看performance_schema下的MDL元数据锁记录信息DBA侧可通过在执行DDL语句的会话中,会话级别设置lock_wait_timeout系统变量为一个较小的值,在超过该时间值之后,仍然无法获得所需的锁时,自动放弃DDL操作(请自行评估需求)2)在会话1中,开启一个显式事务,并使用INSERT语句插入一行超过字段定义长度的数据行(模拟应用侧插入数据)3)在会话2中,将报错字段pad的长度加长到70个字符(模拟DBA侧使用DDL语句修改列长度定义)4)在会话3中,查看数据库中的会话状态信息(模拟DBA侧排查故障问题)PS:MDL元数据锁的类型有很多种,根据官方手册中对performance_schema.metadata_locks表的LOCK_TYPE字段的描述可得知,一共有9种(INTENTION_EXCLUSIVE、SHARED、SHARED_HIGH_PRIO、SHARED_READ、SHARED_WRITE、SHARED_UPGRADABLE、SHARED_NO_WRITE、SHARED_NO_READ_WRITE、EXCLUSIVE),但,官方手册中并未找到每一种MDL锁的具体含义和发生的场景,关于MDL锁更详细的信息可参考如下这两个链接

https://blog.csdn.net/finalkof1983/article/details/88063328



| 作者简介


罗小波沃趣科技开发云主机域名高级数据库技术专家

IT从业多年,主要负责MySQL 产品的数据库支撑与售后二线支撑。曾参与版本发布系统、轻量级监控系统、运维管理平台、数据库管理平台的设计与编写,熟悉MySQL体系结构,Innodb存储引擎,喜好专研开源技术,多次在公开场合做过线下线上数据库专题分享,发表过多篇数据库相关的研究文章。

相关推荐: MySQL 主从复制资料汇总

官方参考文档:http://dev.mysql.com/doc/refman/5.6/en/replication.html 博客地址1:http://blog.csdn.net/mchdba/article/details/11354771 博客地址2:ht…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 06/05 22:01
下一篇 06/05 22:01

相关推荐