mysql元数据锁(MDL锁)手动杀死进程

文章讨论了MySQL中的元数据锁(MDL)机制,指出MDL在表结构修改时自动加锁,并在事务提交后释放。如果事务未提交,可能导致线程阻塞。当遇到阻塞时,可以通过`SHOWPROCESSLIST`找到阻塞线程并使用`KILL`命令解除锁定。
摘要由CSDN通过智能技术生成

首先来说,mysql锁的粒度分为全局锁,表锁,行锁

那么元数据属于哪个范畴中呢?

其实元数据锁属于表锁的范畴,我们在对数据库操作时,或自动加锁,

做CRUD时,会自动加上MDL读锁

对一个表的结构做出改变的时候,加的就是MDL写锁

eg:

 

 

SHOW PROCESSLIST   
它用来显示当前服务器中所有活动的线程(连接)的信息

详细原理如下,如果想直接解决‘锁表’问题,直接跳到最后

-- 查看元数据锁
select OBJECT_TYPE,OBJECT_SCHEMA,OBJECT_NAME,LOCK_TYPE, LOCK_DURATION,lock_status,owner_thread_id from performance_schema.metadata_locks 

 这里就出现一个疑问

MDL 不需要显示调用,那它是在什么时候释放的?

MDL 是在事务提交后才会释放,这意味着事务执行期间,MDL 是一直持有的

这里需要注意:如果事务一不提交事务,就会一直阻塞线程

如果不下心阻塞了,没有释放,怎么去手动解锁呢?

        

 这里,重点关注lock_status,"PENDING"代表线程在等待MDL,而"GRANTED"则代表线程持有MDL。

找到我们操作的数据

select * from performance_schema.threads where thread_id in(9228879)

查找出对应的  processlist id

可以看出processlist id为839为阻塞线程,应该kill掉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郎伟学架构

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值