MySQL的乐观锁和悲观锁;MySQL 遇到过死锁如何解决?
  R4VBsx5oF4Uo 2023年11月02日 56 0

一、MySQL的乐观锁和悲观锁

1.1悲观锁(Pessimistic Concurrency Control):

悲观锁认为被它保护的数据是极其不安全的,每时每刻都有可能被改动,一个事务拿到悲观锁后,其他任何事务都不能对该数据进行修改,只能等待锁被释放之后才可以被执行。

1.2乐观锁(Optimistic Concurrency Control)

乐观锁认为数据变动不会太频繁。

乐观锁通常是通过在表中增加一个版本(version)或者时间戳(timestamp)来实现,其中版本最为常用。

事务在从数据库中取数据时,会将该数据的版本也取出来(v1),当事务对数据变动完毕想要将其更新到表中时,会将之前取出来的版本v1与数据中的最新版本v2进行对比,如果v1=v2,那么说明在数据变动期间,没有其他事务对数据进行修改,此时就允许事务对表中的数据进行修改,并且修改时version会加1,以此来表明数据已经被改动。

如果v1不等于v2,则说明数据变动期间,该数据被其他事务改动了,此时不允许数据更新到表中,一般的处理办法就是通知用户让其重新操作。

不同于悲观锁,乐观锁通常是由开发者实现的。

二、死锁

排查死锁的一般步骤是这样的:

(1)查看死锁日志 show engine innodb status;

(2)找出死锁 sql

(3)分析 sql 加锁情况

(4)模拟死锁案发

(5)分析死锁日志

(6)分析死锁结果

当然,这只是一个简单的流程说明,实际上生产中的死锁千奇百怪,排查和解决起来没那么简单。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
R4VBsx5oF4Uo