加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql的死锁问题分析与解决方法

发布时间:2022-06-15 14:22:23 所属栏目:MySql教程 来源:互联网
导读:前几天我的mysql突然出现大量死锁,全部需要一个个Kill id才能完成,下面我总结一下我最终解决死锁方法吧. myISAM和MEMORY存储引擎采用的是表级锁table-level locking 表级锁不会产生死锁.所以解决死锁主要还是真对于最常用的InnoDB.在遇到问题时,先执行show p
  前几天我的mysql突然出现大量死锁,全部需要一个个Kill id才能完成,下面我总结一下我最终解决死锁方法吧.
 
  myISAM和MEMORY存储引擎采用的是表级锁table-level locking
 
  表级锁不会产生死锁.所以解决死锁主要还是真对于最常用的InnoDB.在遇到问题时,先执行show processlist找到死锁线程号.然后Kil processNo.
 
  当然主要解决还是需要去看一下具体的操作,可能产生死锁.
 
  Show innodb status检查引擎状态,可以看到哪些语句产生死锁.
 
  SHOW PROCESSLIST查看数据库中表的状态,是否被锁.
 
  kill id //杀掉被锁的表,代码如下:
 
  set autocommit=0;
  select * from t1  where uid='xxxx' for update    //在有索引(例如uid)的情况下是行锁,否则是表锁
  insert into t1 values(1,'xxxxx');
  commit;
  =====================================================
  lock tables t1 write|read;
 
  解决办法:
 
  1、全表扫描,没有可用的索引.
 
  2、解决把你程序中的SQL,把IN改成JOIN.
 
  3、在mysql中的my.ini中把数据库连接时间改小点

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读