mysql 死锁产生的原因和必要条件(Mysql查看死锁与解除死锁的深入讲解)
mysql 死锁产生的原因和必要条件
Mysql查看死锁与解除死锁的深入讲解前言
前段时间遇到了一个mysql 死锁相关的问题,整理一下。
问题描述:mysql 的修改语句似乎都没有生效,同时使用mysql gui 工具编辑字段的值时会弹出异常。
什么是死锁
在解决mysql 死锁的问题之前,还是先来了解一下什么是死锁。
死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等的进程称为死锁进程。
死锁的表现
死锁的具体表现有两种:
mysql 增改语句无法正常生效 使用mysql gui 工具编辑字段的值时,会出现异常。 如何避免死锁
阻止死锁的途径就是避免满足死锁条件的情况发生,为此我们在开发的过程中需要遵循如下原则:
1.尽量避免并发的执行涉及到修改数据的语句。
2.要求每一个事务一次就将所有要使用到的数据全部加锁,否则就不允许执行。
3.预先规定一个加锁顺序,所有的事务都必须按照这个顺序对数据执行封锁。如不同的过程在事务内部对对象的更新执行顺序应尽量保证一致。
查看死锁
mysql 查询是否存在锁表有多种方式,这里只介绍一种最常用的。
1. 查看正在进行中的事务
|
select * from information_schema.innodb_trx |
可以看到 进程id为3175 的事务在锁住了,而另一个id为3173的事务正在执行,但是没有提交事务。
2. 查看正在锁的事务
|
select * from information_schema.innodb_locks; |
3. 查看等待锁的事务
|
select * from information_schema.innodb_lock_waits; |
4. 查询是否锁表
|
show open tables where in_use > 0; |
在发生死锁时,这几种方式都可以查询到和当前死锁相关的信息。
5. 查看最近死锁的日志
|
show engine innodb status |
解除死锁
如果需要解除死锁,有一种最简单粗暴的方式,那就是找到进程id之后,直接干掉。
查看当前正在进行中的进程
|
show processlist // 也可以使用 select * from information_schema.innodb_trx; |
这两个命令找出来的进程id 是同一个。
杀掉进程对应的进程 id
|
kill id |
验证(kill后再看是否还有锁)
|
show open tables where in_use > 0; |
参考链接
mysql 查看表和解锁表
mysql 死锁是什么?
到此这篇关于mysql查看死锁与解除死锁的文章就介绍到这了,更多相关mysql查看死锁与解除死锁内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
原文链接:https://segmentfault.com/a/1190000038352601
- 查询按照部门分组的mysql语句(Mysql根据某层部门ID查询所有下级多层子部门的示例)
- mysql全套优化(Mysql优化神器推荐)
- mysql标签的用法(mysql 的indexof函数用法说明)
- mysql8.0如何配超时时间(解决MySQL8.0时区的问题步骤)
- 如何让mysql强制设置复杂的密码
- mysql的limit的分页使用(获取 MySQL innodb B+tree 的高度的方法)
- mysql怎么删除用户操作(解决mysql删除用户 bug的问题)
- MySQL 使用事件(Events)完成计划任务(MySQL 使用事件Events完成计划任务)
- mysql数据库迁移命令(MySQL数据迁移相关总结)
- 用mysql编写test数据库(MySQL制作具有千万条测试数据的测试库的方法)
- windows 安装解压版 mysql5.7.28 winx64的详细教程(windows 安装解压版 mysql5.7.28 winx64的详细教程)
- mysql读写分离代码实现(MySQL Router实现MySQL的读写分离的方法)
- navicatformysql怎么激活(一文读懂navicat for mysql基础知识)
- mysql8.0.15官方最新版本安装教程(MySQL8.0.24版本Release Note的一些改进点)
- mysql把重复数据删掉(mysql查找删除重复数据并只保留一条实例详解)
- mysql explain的用法
- 英语难学吗(法语比英语难学吗)
- 今天要吃什么(今天要吃什么菜好)
- 网红直播可以赚很多钱吗(网红直播可以赚很多钱吗)
- 今天是什么日子(今天是什么日子有什么特殊意义吗)
- 这里输入关键词(怎么输入关键词搜索)
- 34岁的舒畅,就这样走到了末路,不知会不会后悔15年前的草率决定(就这样走到了末路)
热门推荐
- css3特性动画图(CSS3轻松实现清新 Loading 效果的简单实例)
- python线程池的实现原理(详解python中的线程与线程池)
- mysql用什么类型数据(MySQL 数据类型选择原则)
- dedecms网站空白(DEDECMS支持中文水印的解决方法)
- html5播放器按菜单键没反应(解决HTML5中的audio在手机端和微信端的不能自动播放问题)
- linux开启ssh服务(Linux ssh服务器配置代码实例)
- 如何找到某个HTML元素所绑定的事件
- docker中国加速镜像怎么设置(Docker 安装及配置镜像加速的实现)
- sqlserver新建表参数错误(Sql Server中判断表、列不存在则创建的方法)
- python怎么装opencv(Python基于opencv实现的简单画板功能示例)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9