行级锁对性能的影响

怎样减少行级锁对性能的影响MySQL的行级锁是在引擎层有各个引擎自己实现的。但并不是所有的引擎都支持行级锁,比如MyISAM引擎就不支持行级锁。不支持行级锁意味着并发控制只能使用表锁,对于这种引擎的表,同一张表上的任何时刻只能有一个更新在执行,这就会影响到业务的并发度,InnoDB是支持行锁的。这也是InnoDB用来代替MyISAM的原因之一。从两阶段锁说起在下面的操作序列中,事务B的update语句执行时会是什么现象呢?假设字段id是表t的主键。这个问题的结论取决于事务A在执行完两条updat
摘要由CSDN通过智能技术生成

怎样减少行级锁对性能的影响

MySQL的行级锁是在引擎层有各个引擎自己实现的。但并不是所有的引擎都支持行级锁,比如MyISAM引擎就不支持行级锁。

不支持行级锁意味着并发控制只能使用表锁,对于这种引擎的表,同一张表上的任何时刻只能有一个更新在执行,这就会影响到业务的并发度,InnoDB是支持行锁的。这也是InnoDB用来代替MyISAM的原因之一。

从两阶段锁说起

在下面的操作序列中,事务B的update语句执行时会是什么现象呢?假设字段id是表t的主键。

在这里插入图片描述
这个问题的结论取决于事务A在执行完两条update语句后,持有哪些锁,以及在什么时候释放。

实际上事务B的update语句会被阻塞,直到事务A执行commit之后,事务才会继续执行。

也就是说,在InnoDB引擎中,行锁是在需要的时候才加上的,但并不是不需要了就立即释放,而是要等到事务结束时才释放。这个就是两阶段锁协议

这个有什么用呢?
如果你的事务中需要锁多个行,要把最可能造成的锁冲突、最可能影响并发度的锁尽量往后放。

假设顾客A要在影院B购买电影票。

  1. 从顾客A账户余额中扣除电影票的票价
  2. 给影院B的账户余额增加上去
  3. 记录一条交易日志
    (相当于转账)
    从上面的分析来看我们需要两条update语句和一条insert语句,当然为了保证原子性操作&#x
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值