用户名:
密 码: 记住
您当前的位置:首页 > 网络编程 > mysql教程

mysql的死锁问题分析与处理方法

时间:2015-01-23  来源:西部数据  作者:西部数据

前几天我的mysql突然出现大量死锁,全部需要一个个Kill id才能完成,下面我总结一下我最终解决死锁方法吧.

myISAM和MEMORY存储引擎采用的是表级锁table-level locking

死锁:所谓死锁<DeadLock>:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等竺的进程称为死锁进程.

表级锁不会产生死锁.所以解决死锁主要还是真对于最常用的InnoDB.在遇到问题时,先执行show processlist找到死锁线程号.然后Kil processNo.

当然主要解决还是需要去看一下具体的操作,可能产生死锁.

Show innodb status检查引擎状态,可以看到哪些语句产生死锁.

SHOW PROCESSLIST查看数据库中表的状态,是否被锁.

kill id //杀掉被锁的表,代码如下:

  1. set autocommit=0; 
  2. select * from t1  where uid='xxxx' for update    //在有索引(例如uid)的情况下是行锁,否则是表锁 
  3. insert into t1 values(1,'xxxxx'); 
  4. commit; 
  5. ===================================================== 
  6. lock tables t1 write|read; 
  7. insert into t1 values(2,'xxxxx'); //只有insert 
  8. unlock tables; //phpfensi.com 

解决办法:

1、全表扫描,没有可用的索引.

2、解决把你程序中的SQL,把IN改成JOIN.

3、在mysql中的my.ini中把数据库连接时间改小点.

来顶一下
返回首页
返回首页
推荐资讯
WiFi太不安全:7岁女孩11分钟内入侵公共网络 WiFi太不安全:7岁女孩11分钟内入侵近期刚刚发布研究说WiFi网络能获得人们手机里多少私人信息,
不服跑个分?人工智能也出现“刷分”乱象 不服跑个分?人工智能也出现“刷分2014年,人工智能领域突然爆发,成为了科研和科技创业的热门
相关文章
    无相关信息
栏目更新
栏目热门