mysql的死锁问题分析与处理方法
发布:smiling 来源: PHP粉丝网 添加日期:2014-10-12 16:38:16 浏览: 评论:0
前几天我的mysql突然出现大量死锁,全部需要一个个Kill id才能完成,下面我总结一下我最终解决死锁方法吧.
myISAM和MEMORY存储引擎采用的是表级锁table-level locking
死锁:所谓死锁<DeadLock>:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等竺的进程称为死锁进程.
表级锁不会产生死锁.所以解决死锁主要还是真对于最常用的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;
- insert into t1 values(2,'xxxxx'); //只有insert
- unlock tables; //phpfensi.com
解决办法:
1、全表扫描,没有可用的索引.
2、解决把你程序中的SQL,把IN改成JOIN.
3、在mysql中的my.ini中把数据库连接时间改小点.
Tags: mysql死锁 mysql死锁问题
- 上一篇:mysql日期时间比较简单实例
- 下一篇:sql 解决无法删除表,提示被外键约束引用
相关文章
- ·mysql读写锁与死锁问题(2014-10-17)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)