MySQL行锁及其性能优化

MySQL行锁及其性能优化

行锁

  行锁针对数据表中行记录的锁,需要存储引擎支持,MyISAM不支持,InooDB支持, 在InnoDB事务中,行锁在需要时才加上,但并不是不需要了就立刻释放,而是要等到事务结束时才释放,所以如果你的事务中需要锁多个行,要把最可能造成锁冲突、最可能影响并发度的锁尽量往后放,以减少对性能的损耗。

死锁与死锁检测

  MySQL中处理死锁有两种不同的策略:
   1.直接进入等待,直到超时。这个超时时间可以通过参数innodb_lock_wait_timeout来设置。这个,的缺点在于,超时时间默认为50s,这对于大多数业务是不可容忍的,如果将这个时间修改的更小一些(如1s)则会发生本应等待锁处理的线程直接超时失败的问题,这个值很难去进行精准的控制。
  2.发起死锁检测,发现死锁后,主动回滚死锁链条中的某一个事务,让其他事务得以继续执行。将参数innodb_deadlock_detect设置为on,表示开启这个逻辑。这种策略相对较好,但是检测死锁需要耗费CPU资源,在并发数量大的情况也不是很好,可以在中间件或MySQL源码进行改造,对于相同行的更新,在进入引擎之前排队,避免在InnoDB内部有大量的死锁检测工作,也可以人为的将数据分散存储,类似于分表。

参考文献

MySQL实战45讲

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值