教程集 www.jiaochengji.com
教程集 >  数据库  >  mysql  >  正文 mysql的死锁问题分析与处理方法

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

发布时间:2023-05-03   编辑:jiaochengji.com
教程集为您提供mysql的死锁问题分析与处理方法等资源,欢迎您收藏本站,我们将为您提供最新的mysql的死锁问题分析与处理方法资源
前几天我的mysql突然出现大量死锁,全部需要一个个Kill id才能完成,下面我总结一下我最终解决死锁方法吧。

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

死锁
所谓死锁<DeadLock>: 是指两个或两个以上的进程在执行过程中,
因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.
此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等竺的进程称为死锁进程.
 
表级锁不会产生死锁.所以解决死锁主要还是真对于最常用的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中把数据库连接时间改小点。

您可能感兴趣的文章:
深入分析MySQL更新死锁问题
自动删除mysql死连接 mysql死锁
mysql LOCK TABLES和UNLOCK TABLES
mysql如何锁定单个表
并发编程挑战:死锁与上下文切换
分析MySQL数据库物理备份死锁
MySQL数据库之锁的详解
mysql中的锁、事务、并发控制的相关知识
golang知识点
java多线程的同步与多线程锁介绍

[关闭]
~ ~