mysql死锁怎么解决
程序员文章站
2022-04-17 14:43:47
...
1,查看数据库的隔离级别:
> select @@tx_isolation;
+-----------------+
| @@tx_isolation |
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in set (0.00 sec)
2,去查看先当前库的线程情况:
> show processlist;
+----+-------------+-----------+------+---------+------+--------------------------+------------------+----------+
| Id | User | Host | db | Command | Time | State | Info | Progress |
+----+-------------+-----------+------+---------+------+--------------------------+------------------+----------+
| 1 | system user | | NULL | Daemon | NULL | InnoDB purge coordinator | NULL | 0.000 |
| 2 | system user | | NULL | Daemon | NULL | InnoDB purge worker | NULL | 0.000 |
| 3 | system user | | NULL | Daemon | NULL | InnoDB purge worker | NULL | 0.000 |
| 4 | system user | | NULL | Daemon | NULL | InnoDB purge worker | NULL | 0.000 |
| 5 | system user | | NULL | Daemon | NULL | InnoDB shutdown handler | NULL | 0.000 |
| 9 | root | localhost | NULL | Query | 0 | init | show processlist | 0.000 |
+----+-------------+-----------+------+---------+------+--------------------------+------------------+----------+
没有看到正在执行的慢SQL记录线程,再去查看innodb的事务表INNODB_TRX,看下里面是否有正在锁定的事务线程,看看ID是否在show full processlist里面的sleep线程中,如果是,就证明这个sleep的线程事务一直没有commit或者rollback而是卡住了,我们需要手动kill掉。
> SELECT * FROM information_schema.INNODB_TRX;
如果有记录,则找到trx_mysql_thread_id这个字段对应的id, 将其kill掉。假如id=100
mysql->kill 100
SELECT CONCAT_WS('','kill',' ',t.trx_mysql_thread_id,';')a FROM information_schema.INNODB_TRX t;
4,总结分析
表数据量也不大,按照普通的情况来说,简单的update应该不会造成阻塞的,mysql都是autocommit,不会出现update卡住的情况,去查看下autocommit的值。
> select @@autocommit;
+--------------+
| @@autocommit |
+--------------+
| 1 |
+--------------+
1 row in set (0.00 sec)
1表示自动提交。0表示不自动提交。
如果你发现自己的数据库autocommit=0,将它改正吧。
最后。
解除死锁的两种方法:
(1)终止(或撤销)进程。终止(或撤销)系统中的一个或多个死锁进程,直至打破循环环路,使系统从死锁状态中解除出来。
(2)抢占资源。从一个或多个进程中抢占足够数量的资源,分配给死锁进程,以打破死锁状态。
上一篇: UVA11732 “strcmp()“ Anyone?
下一篇: 疯狂的魔头司机,笑出冷汗
推荐阅读
-
SQLyog连接MySQL8.0报2058错误的解决方案
-
Windows 8.1下MySQL5.7 忘记root 密码的解决方法
-
PHP商品秒杀问题解决方案实例详解【mysql与redis】
-
MySQL中NOT IN填坑之列为null的问题解决
-
eclipse项目重命名运行后名字会还原怎么办 eclipse改名失败解决方法
-
打开CBox或切换直播节目提示当前页面的脚本发生错误怎么解决
-
爱奇艺太卡怎么办?爱奇艺看视频太卡如何解决
-
MySQL5.7.03 更换高版本到MySQL 5.7.17安装过程及发现问题解决方案
-
迅雷下载总是卡99%是怎么回事?如何解决?迅雷终于回应了
-
MySql插入数据成功但是报[Err] 1055错误的解决方案