您当前的位置:首页 > 电脑百科 > 数据库 > 百科

数据库的死锁原因 和 处理办法

时间:2020-08-18 13:32:12  来源:  作者:

数据库的死锁: 和 JAVA的 死锁类似 ,条件 ,两个事务(线程) ,事务1 和事务2 ,事务1 要拿到 了 锁a ,等待 锁 b ,事务2 拿到了 锁b ,等待锁a。 这时候就死锁了。

 

备注: java 我们很明显的 知道什么时候加的锁什么时候释放锁,比如 synch 方法( 进入方法前获取锁,方法执行完毕释放锁 ), synch 语句块( 进入语句块 和退出 语句块 ) ,lock 接口( lock 和 unlock 的时候 )。

    数据库加锁在什么时候呢?

    MySQL 为例, mysql 的写是加的 写锁,也就是独占锁, mysql innodb 的读 因为有个非锁定读的机制,所以 读的时候不需要加锁,并且读的时候别的事务 也能改这份数据,但是 读线程读到的依旧是 事务启动的时候的数据( RR 事务隔离级别 描述的 可重复读)。

    也就是 innodb 读不加锁。但是写加了锁,在什么时候加锁呢? 在我们执行一条 update 语句的时候。 在什么时候释放锁呢? 在事务提交的时候。

 

时间  事务a 开始 事务b 开始

t1   1 随便 读点啥..... 1 随便 搞点啥

t2  2 update 资源 1 锁 资源1,如果拿不到就等待 2 update 资源2 锁定资源2 ,锁不到就等待

t3    3 随便搞搞点 啥                    3 随便搞点啥

t4   4 update 资源 2 锁资源2,如果拿不到就等待 4 update 资源1 锁定资源1 ,锁不到就等待

 

上面说过 锁会在事务提交的时候释放,所以 两个事务就锁死了。

 

做实验的时候可以 关闭mysql 的自动提交 ,然后2 个窗口敲 。或者 java代码里面通过 java的 CyclicBarrier 让两个事务 在 t3 的时间点对齐 。

 

 

 

 

然后说说数据库死锁的解决办法。

 

1 编码规范有计划的顺序更新数据避免出现 相互抱锁的 问题。

 

2 数据库线程有超时 机制,一个事务超时,锁被释放,另一个线程就会向下执行了。

 

3 数据库有死锁检查 机制,发现死锁的时候 会让 更新少的 一个 事务回滚。

  innodb_deadlock_detect=on 之歌参数默认是打开的,也就是mysql 默认就会处理死锁问题。处理方式就是回滚 跟新少的事务。

 

4 mysql 如果关闭了 死锁回滚 可以配置 等锁超时 时间 innodb_lock_wait_timeout 。 默认是 5 0 秒。

数据库的死锁原因 和 处理办法


Tags:数据库死锁   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
数据库的死锁: 和 java的 死锁类似 ,条件 ,两个事务(线程) ,事务1 和事务2 ,事务1 要拿到 了 锁a ,等待 锁 b ,事务2 拿到了 锁b ,等待锁a。 这时候就死锁了。 备注: java 我们很明...【详细内容】
2020-08-18  Tags: 数据库死锁  点击:(81)  评论:(0)  加入收藏
▌简易百科推荐
1增1.1【插入单行】insert [into] <表名> (列名) values (列值)例:insert into Strdents (姓名,性别,出生日期) values (&#39;开心朋朋&#39;,&#39;男&#39;,&#39;1980/6/15&#3...【详细内容】
2021-12-27  快乐火车9d3    Tags:SQL   点击:(1)  评论:(0)  加入收藏
最近发现还有不少做开发的小伙伴,在写存储过程的时候,在参考已有的不同的写法时,往往很迷茫, 不知道各种写法孰优孰劣,该选用哪种写法,以及各种写法的优缺点,本文以一个简单的查询...【详细内容】
2021-12-23  linux上的码农    Tags:sql   点击:(9)  评论:(0)  加入收藏
《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的HasorDB 是一个全功能数据库访问工具,提供对象映射、丰...【详细内容】
2021-12-22  GitHub精选    Tags:HasorDB   点击:(5)  评论:(0)  加入收藏
作者丨Rafal Grzegorczyk译者丨陈骏策划丨孙淑娟【51CTO.com原创稿件】您是否还在手动对数据库执行各种脚本?您是否还在浪费时间去验证数据库脚本的正确性?您是否还需要将...【详细内容】
2021-12-22    51CTO  Tags:Liquibase   点击:(3)  评论:(0)  加入收藏
场景描述:由于生产环境的表比较复杂,字段很多。这里我们做下简化,只为说明今天要聊的问题。有两张表 tab1,tab2: tab1 数据如下: tab2 数据如下: 然后给你看下,我用来统计 name=&#3...【详细内容】
2021-12-20  Bald    Tags:SQL   点击:(5)  评论:(0)  加入收藏
前言知识无底,学海无涯,知识点虽然简单,但是比较多,所以将MySQL的基础写出来,方便自己以后查找,还有就是分享给大家。一、SQL简述1.SQL的概述Structure Query Language(结构化查...【详细内容】
2021-12-16  谣言止于独立思考    Tags:SQL基础   点击:(13)  评论:(0)  加入收藏
前言作为一名测试工程师,工作中在对测试结果进行数据比对的时候,或多或少要和数据库打交道的,要和数据库打交道,那么一些常用的 SQL 查询语法必须要掌握。最近有部分做测试小伙...【详细内容】
2021-12-14  柠檬班软件测试    Tags:SQL   点击:(15)  评论:(0)  加入收藏
话说C是面向内存的编程语言。数据要能存得进去,取得出来,且要考虑效率。不管是顺序存储还是链式存储,其寻址方式总是很重要。顺序存储是连续存储。同质结构的数组通过其索引表...【详细内容】
2021-12-08  小智雅汇    Tags:数据存储   点击:(17)  评论:(0)  加入收藏
概述DBConvert Studio 是一款强大的跨数据库迁移和同步软件,可在不同数据库格式之间转换数据库结构和数据。它将成熟、稳定、久经考验的 DBConvert 和 DBSync 核心与改进的现...【详细内容】
2021-11-17  雪竹聊运维    Tags:数据库   点击:(26)  评论:(0)  加入收藏
一、前言 大家好,我是小诚,《从0到1-全面深刻理解MySQL系列》已经来到第四章,这一章节的主要从一条SQL执行的开始,由浅入深的解析SQL语句由客户端到服务器的完整执行流程,最...【详细内容】
2021-11-09  woaker    Tags:SQL   点击:(35)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条