栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

07行锁功过——怎么减少行锁对性能的影响

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

07行锁功过——怎么减少行锁对性能的影响

MySQL的行级锁

创建时间:2021年11月12日00:30:06

文章目录
  • MySQL的行级锁
    • 二阶段锁协议
      • 问:介绍下Innodb的行锁。
      • 问:解释下死锁。
      • 问:有个场景,频繁更新一条数据的时候,CPU急速飙升,但事务又没解决几个,是什么原因导致的?用行级锁相关的内容解释下。
      • 问:一般怎么解决死锁?
      • 问:针对更新热点数据时产生的死锁检测问题,有什么方案可以处理?
      • 问:假如删表一万行数据,下面哪几种方式比较好?

——————————————————————————————

二阶段锁协议 问:介绍下Innodb的行锁。

答:innodb引擎支持行级锁,同样是共享读、排他写,该锁遵循二阶段锁协议。

所谓二阶段锁协议,是指在事务中,需要加锁时才加锁,提交事务时才释放。

因此在使用行级锁时,尤其注意要将会争用行级锁资源的操作放到接近事务结束位置,最大程度减少锁等待。

问:解释下死锁。

答:已知二阶段所协议的定义,当两个事务同时启动,并相互等待对方的一个资源做释放的时候,就会陷入死锁。

问:有个场景,频繁更新一条数据的时候,CPU急速飙升,但事务又没解决几个,是什么原因导致的?用行级锁相关的内容解释下。

答:应该是过多的死锁检测导致的。对同一行数据进行更新时,在默认情况下,进入锁等待的线程会检测自己是否陷入死锁,时间复杂度为O(n),短时间的高并发会导致CPU飙升,例如1000个线程则死锁检测次数为1000^2次方。

问:一般怎么解决死锁?

答:

1、锁等待超时;

show variables like 'innodb_lock_wait_timeout'

2、死锁检测;

show variables like 'innodb_deadlock_detect'

一般通过死锁检测。

问:针对更新热点数据时产生的死锁检测问题,有什么方案可以处理?

答:

从客户端层面限制,但如果应用客户端过多,这个方法不奏效;

从并发度层面限制,但要求高:了解MySQL源码或者会相关中间件;

从关系设计层面限制,将热点数据进行拆分;

从代码规范层面:尽量减少产生锁等待;

问:假如删表一万行数据,下面哪几种方式比较好?

1、一个连接一次性执行删除一万行

2、一个连接,二十次循环执行删除500行

3、二十个连接,一次性同时执行删除500行

答:第二个好:减少单语句锁的长时间占用,和大事务。无锁冲突。
00行

3、二十个连接,一次性同时执行删除500行

答:第二个好:减少单语句锁的长时间占用,和大事务。无锁冲突。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/490776.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号