您的位置:首页 > 数据库 > MySQL

记录一次Mysql死锁排查事件

2018-11-02 17:12 471 查看

Navicat 修改表 卡死 Mysql 死锁了

我:咔咔写代码,然后IDEA正在debug…这个时候,我的debug还没结束!
同事(大佬)过来我这边讨论表结构。
表示礼貌,我停下了手中的debug,跟他讨论了起来,经过许久的讨论,需要修改表(加几个字段)。

在同事的协助下,打开navicat,修改表

AAAA
。加上了新增的字段,点击保存。就卡死了。
以为是navicat卡了,或者是电脑卡了。任务管理器关掉navicat,重新修改保存(还好字段不多QAQ)。咦??怎么又卡死了,鼠标一直转圈圈。
What?黑人问号???????

这个时候,意识到应该是mysql被锁死了!

那么,百度如何解除死锁:

得到下面的结果

解除Mysql正在死锁的状态有两种方法:
第一种:
1.查询是否锁表

show OPEN TABLES where In_use > 0;

2.查询进程(如果您有SUPER权限,您可以看到所有线程。否则,您只能看到您自己的线程)

show processlist

3.杀死进程id(就是上面命令的id列)

kill id

navicat控制台执行

show processlist
,发现确实有进程被锁了。我们心想kill掉这个进程就好了。
呵呵~杀掉了锁住的进程也没用。

突然,灵光一现,我在debug。这个方法里面,恰好就对表

AAAA
进行了查询(query)操作,mysql是关系型数据库,代码里面加了事务。那么,在整个方法没有执行完之前,对这张表是加了锁的。这个时候,去修改这张表的字段,当然是不允许的!

结束debug,再修改表,就OK了。

最后,推荐读的一本书。
非常之六批的一本书 — 《深入理解计算机系统(原书第三版)》
有时间了一定要去浅读一下。

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: