登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
安全
›
MySQL 07 行锁功过:怎么减少行锁对性能的影响? ...
MySQL 07 行锁功过:怎么减少行锁对性能的影响?
[ 复制链接 ]
替攀浮
2025-9-25 21:07:17
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
行锁是针对数据表中行记录的锁,是在引擎层由引擎实现的。
从两阶段锁说起
在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 8.4未使用 mysql_native_password 却报插件未加载
MySQL 从入门到删库跑路,保姆级教程!
AlmaLinux下mysql 8安装与数据迁移
Ubuntu下,MySQL密码遗失时修改密码
Ubuntu下,MySQL修改端口号
DBLens 连接数怎么限制?免费 3 个,订阅随便加
MySQL 筛选条件放 ON 后 vs 放 WHERE 后
邮箱怎么群发邮件给多个人
记一次MySQL binlog日志导致磁盘空间占满的问题
记一次MySQL binlog日志导致磁盘空间占满的问题
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
MySQL 8.4未使用 mysql_native_password 却报插件未加载
2
57
恙髡
2025-11-29
业界
MySQL 从入门到删库跑路,保姆级教程!
0
782
都淑贞
2025-12-02
安全
AlmaLinux下mysql 8安装与数据迁移
1
337
菅舛
2025-12-07
安全
Ubuntu下,MySQL密码遗失时修改密码
1
863
徙办
2025-12-07
安全
Ubuntu下,MySQL修改端口号
2
117
痨砖
2025-12-07
业界
DBLens 连接数怎么限制?免费 3 个,订阅随便加
3
616
秤陷曲
2025-12-09
安全
MySQL 筛选条件放 ON 后 vs 放 WHERE 后
1
954
热琢
2025-12-10
安全
邮箱怎么群发邮件给多个人
0
71
这帜
2025-12-17
安全
记一次MySQL binlog日志导致磁盘空间占满的问题
0
883
荆邦
2025-12-17
安全
记一次MySQL binlog日志导致磁盘空间占满的问题
0
783
跟尴
2025-12-17
回复
(4)
松菊
2025-12-1 22:08:38
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
分享、互助 让互联网精神温暖你我
施婉秀
2025-12-6 12:20:48
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
分享、互助 让互联网精神温暖你我
咫噎
6 天前
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
感谢分享
锄淫鲷
5 天前
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
分享、互助 让互联网精神温暖你我
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
替攀浮
5 天前
关注
0
粉丝关注
17
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991124
anyue1937
9994893
kk14977
6845357
4
xiangqian
638210
5
韶又彤
9997
6
宋子
9983
7
闰咄阅
9993
8
刎唇
9993
9
俞瑛瑶
9998
10
蓬森莉
9951
查看更多
今日好文热榜
157
【译】初探 Visual Studio 2026 全新的用户
315
建筑渗漏治理的标准化实践:基于上海芮生建
48
Aspire 13:从.NET 编排工具到真正的多语言
997
用 .NET 最小化 API 构建高性能 API
394
VonaJS是如何做到文件级别精确HMR(热更新)
386
PHP 值对象实战指南:避免原始类型偏执
98
北京上门收酒机构排行|3家靠谱之选,卖酒
921
好拼|免费在线拼图工具又收到赞助啦
479
数据点的“社交距离”:衡量它们之间的相似
718
告别“草率编程”:Vibe Engineering 如何
10
字符串匹配算法
342
监听小工具-股票监控神奇九转分钟线信号触
427
国内GEO优化技术深度测评:核心维度全景对
366
Avalonia源码解读:Grid(网格控件)
239
研究 TikTok 爆款的人,一定要懂这类下载工
960
Java Optional 完全指南:优雅处理 null 的
26
全面封禁 Cursor!又一家大厂出手了
883
记一次MySQL binlog日志导致磁盘空间占满的
783
记一次MySQL binlog日志导致磁盘空间占满的
880
小白也能看懂的RLHF-PPO:原理篇