最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

MySql数据库死锁deadlock

来源:动视网 责编:小采 时间:2020-11-09 07:24:03
文档

MySql数据库死锁deadlock

MySql数据库死锁deadlock:今天在项目性能测试中遇到个Mysql的DeadLock的问题。 后来根据数据库日子查找原因,大概模拟一下发生的情形。 数据库用的innoDB。 InnoDB 行锁是通过给索引上的索引项加锁来实现的, InnoDB 这种行锁实现特点意味着:只有通过索引条件检索数据, InnoD
推荐度:
导读MySql数据库死锁deadlock:今天在项目性能测试中遇到个Mysql的DeadLock的问题。 后来根据数据库日子查找原因,大概模拟一下发生的情形。 数据库用的innoDB。 InnoDB 行锁是通过给索引上的索引项加锁来实现的, InnoDB 这种行锁实现特点意味着:只有通过索引条件检索数据, InnoD


今天在项目性能测试中遇到个Mysql的DeadLock的问题。 后来根据数据库日子查找原因,大概模拟一下发生的情形。 数据库用的innoDB。 InnoDB 行锁是通过给索引上的索引项加锁来实现的, InnoDB 这种行锁实现特点意味着:只有通过索引条件检索数据, InnoDB 才使

今天在项目性能测试中遇到个Mysql的DeadLock的问题。

后来根据数据库日子查找原因,大概模拟一下发生的情形。

数据库用的innoDB。

InnoDB行锁是通过给索引上的索引项加锁来实现的,InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁!

下面例子中id是主键,操作都走索引,锁都是row lock。

table中数据

用2个线程做如下操作,将发生死锁现象,且1个线程执行成功,另一个线程失败。

最终结果:第一条数据被改变,第3条数据不变。

MySql的InnoDB,\加了事务的select语句索引的记录,会加S锁, insert,delete,update会加X锁。

设定左边为线程1,右边为线程2

线程1在id=1的一行记录上加了S锁, 当线程2要update操作这行记录时,要在记录上加X锁, 此时需要等待线程1释放id=1记录上的S锁。

线程2在id=3的一行记录上加了S锁, 当线程1要update操作这行记录时,要在记录上加X锁, 此时需要等待线程2释放id=3记录上的S锁。

彼此互相等待,然后就死锁了。

Mysql释放死锁的机制,看锁定的记录数,一般会允许锁定记录多的事务执行通过, 而锁定记录少的事物回滚。范围同等时应该是按X锁请求的先后了。

补充说明: InnoDB 如果where后面的条件字段没有索引,则加锁时是会锁表。走索引只会锁查询或操作的记录。InnoDB事务中的查询条件需要小心了

互斥

S

X

S

X

先写这么多。

文档

MySql数据库死锁deadlock

MySql数据库死锁deadlock:今天在项目性能测试中遇到个Mysql的DeadLock的问题。 后来根据数据库日子查找原因,大概模拟一下发生的情形。 数据库用的innoDB。 InnoDB 行锁是通过给索引上的索引项加锁来实现的, InnoDB 这种行锁实现特点意味着:只有通过索引条件检索数据, InnoD
推荐度:
标签: 今天 数据库 项目
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top