您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

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

2024/6/7 0:05:44发布25次查看
前几天我的mysql突然出现大量死锁,全部需要一个个kill id才能完成,下面我总结一下我最终解决死锁方法吧。
myisam和memory存储引擎采用的是表级锁table-level locking
死锁
所谓死锁: 是指两个或两个以上的进程在执行过程中,
因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.
此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等竺的进程称为死锁进程.
表级锁不会产生死锁.所以解决死锁主要还是真对于最常用的innodb.
在遇到问题时
先执行show processlist找到死锁线程号.然后kill 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;
解决办法
1、全表扫描,没有可用的索引。
2、解决把你程序中的sql,把in改成join,
3、在mysql中的my.ini中把数据库连接时间改小点。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product