登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
签到
每天签到奖励2-10圆
导读
排行榜
TG频道
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
VIP申请
VIP网盘
网盘
联系我们
发帖说明
每日签到
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
安全
›
MySQL 07 行锁功过:怎么减少行锁对性能的影响? ...
MySQL 07 行锁功过:怎么减少行锁对性能的影响?
[ 复制链接 ]
替攀浮
2025-9-25 21:07:17
行锁是针对数据表中行记录的锁,是在引擎层由引擎实现的。
从两阶段锁说起
在InnoDB
事务
中,行锁是在需要的时候才加上的,但并不是不需要了就立即释放,而是等到事务结束时才释放,这就是
两阶段锁协议
。
知道这个设定后,如果事务中需要锁多个行,要把最可能造成锁冲突、最可能影响并发度的锁
尽量往后放
。
举个例子,假设有个电影票交易业务,顾客A要在影院B买电影票,其涉及如下操作:
从顾客A账户余额中扣减电影票价;
给影院B账户余额增加电影票价;
记录一条交易日志。
这些操作涉及三条语句,为了保证原子性,会把三个操作放在一个事务中。而观察这三个操作,会发现语句2最可能造成冲突,因为不同顾客买票都会使用语句2修改同一行数据。
根据两阶段锁协议,锁等待是一定有的,而把语句2安排在最后,比如按照312这样的顺序,就能做到最可能造成锁冲突的锁放在后面,最大程度减少了事务之间的等待。
死锁和死锁检测
当并发系统中不同线程出现循环资源依赖,涉及的线程都在等待别的线程释放资源时,就会导致这几个线程都进入无限等待的状态,称为死锁。
以行锁举例:
这时,事务A等待事务B释放id=2的行锁,而事务B等待事务A释放id=1的行锁,造成死锁。
当出现死锁,有两种策略:
直接进入等待,直到超时。这个超时时间可以通过参数innodb_lock_wait_timeout设置。在InnoDB里,默认值是50秒,这往往无法接受。但也不能直接把这个时间设置成一个很小的值,因为会无法区分死锁和简单的锁等待,造成误伤。因此,这种方法一般不使用。
发起死锁检测,发现死锁后,主动回滚死锁链条中的某一个事务,让其他事务得以继续执行。设置参数innode_deadlock_detect=on,表示开启这个逻辑。
正常情况使用第二种策略,但死锁检测也是有负担的。假如n个事务都要更新同一行,由于每个新来的被堵住的线程都要判断自己是否导致了死锁,这个复杂度为\(O(n)\),总复杂度就会达到\(O(n^2)\)。
对于这种热点行更新导致的性能问题,思路主要是:
对于相同行的更新,在进入引擎之前排队。这样在InnoDB内部就不会有大量的死锁检测工作。
将一行改成逻辑的多行来减少锁冲突。比如将影院账户拆成10个记录,这样每次加金额时随机选择其中一条记录来加,每次冲突概率变成原来的1/10,可以减少锁等待个数,也就减少了死锁检测的CPU消耗。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
行锁
MySQL
功过
怎么
减少
相关帖子
MySQL性能分析(三)之optimizer_trace详解
Mysql:记录一次 【systemctl start mysqld】启动超级慢、且启动有可能有问题的问题
项目可以怎么规范Git commit ?
MySQL binlog筛选参数和复制筛选参数
MySQL之B+树分析
MySQL的基本语法(增,删,改,查)
技术解读GaussDB (for MySQL)流控机制
MySQL面试题汇总
MYSQL主从配置
监控系统自监控怎么做?
vip免费申请,1年只需15美金$
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
安全
MySQL性能分析(三)之optimizer_trace详解
0
463
杆树
2025-10-06
安全
Mysql:记录一次 【systemctl start mysqld】启动超级慢、且启动有可能有问题的问题
2
329
庞悦
2025-10-06
安全
项目可以怎么规范Git commit ?
0
406
彼瞄
2025-10-07
安全
MySQL binlog筛选参数和复制筛选参数
0
800
肿圬后
2025-10-07
安全
MySQL之B+树分析
0
765
黎瑞芝
2025-10-07
安全
MySQL的基本语法(增,删,改,查)
0
974
毡轩
2025-10-07
安全
技术解读GaussDB (for MySQL)流控机制
0
930
亢安芙
2025-10-07
安全
MySQL面试题汇总
0
896
崔瑜然
2025-10-07
安全
MYSQL主从配置
0
547
时思美
2025-10-09
安全
监控系统自监控怎么做?
0
690
翁真如
2025-10-10
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
业界
签约作者
程序园优秀签约作者
发帖
替攀浮
2025-9-25 21:07:17
关注
0
粉丝关注
16
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
anyue1937
9999501
dage888
999994
富账慕
10007
4
匝抽
9986
5
孙淼淼
9992
6
柴古香
9993
7
筒濂
9982
8
凌彦慧
9991
9
崔瑜然
9984
10
慢秤
9979
查看更多