登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
安全
›
MySQL 07 行锁功过:怎么减少行锁对性能的影响? ...
MySQL 07 行锁功过:怎么减少行锁对性能的影响?
[ 复制链接 ]
替攀浮
2025-9-25 21:07:17
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
行锁是针对数据表中行记录的锁,是在引擎层由引擎实现的。
从两阶段锁说起
在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数据库全方位优化指南:从硬件到架构的深度调优
MySQL主从复制:原理、部署、运维与选型全指南
一条SQL在MySQL的执行过程?、MyISAM和InnoDB的区别?
MySQL 8.4未使用 mysql_native_password 却报插件未加载
MySQL 从入门到删库跑路,保姆级教程!
AlmaLinux下mysql 8安装与数据迁移
Ubuntu下,MySQL密码遗失时修改密码
Ubuntu下,MySQL修改端口号
DBLens 连接数怎么限制?免费 3 个,订阅随便加
MySQL 筛选条件放 ON 后 vs 放 WHERE 后
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
MySQL数据库全方位优化指南:从硬件到架构的深度调优
2
1006
姬宜欣
2025-11-26
业界
MySQL主从复制:原理、部署、运维与选型全指南
1
330
尚腱埂
2025-11-28
业界
一条SQL在MySQL的执行过程?、MyISAM和InnoDB的区别?
0
961
倡遍竽
2025-11-29
业界
MySQL 8.4未使用 mysql_native_password 却报插件未加载
1
47
恙髡
2025-11-29
业界
MySQL 从入门到删库跑路,保姆级教程!
0
781
都淑贞
2025-12-02
安全
AlmaLinux下mysql 8安装与数据迁移
1
329
菅舛
2025-12-07
安全
Ubuntu下,MySQL密码遗失时修改密码
1
847
徙办
2025-12-07
安全
Ubuntu下,MySQL修改端口号
2
96
痨砖
2025-12-07
业界
DBLens 连接数怎么限制?免费 3 个,订阅随便加
2
594
秤陷曲
2025-12-09
安全
MySQL 筛选条件放 ON 后 vs 放 WHERE 后
1
941
热琢
2025-12-10
回复
(4)
松菊
2025-12-1 22:08:38
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
分享、互助 让互联网精神温暖你我
施婉秀
7 天前
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
分享、互助 让互联网精神温暖你我
咫噎
前天 03:57
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
感谢分享
锄淫鲷
昨天 16:11
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
分享、互助 让互联网精神温暖你我
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
替攀浮
昨天 16:11
关注
0
粉丝关注
17
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
anyue1937
9994893
kk14977
6845356
3934307807
991123
4
xiangqian
638210
5
宋子
9984
6
韶又彤
9998
7
闰咄阅
9993
8
刎唇
9993
9
俞瑛瑶
9998
10
蓬森莉
9951
查看更多
今日好文热榜
831
开源项目分享 : Gitee热榜项目 2025-12-13
805
postgreSQL 中的自定义操作符
683
ROS2核心概念之通信接口
474
拿着顶级服务器跑慢查询,就像开着法拉利送
16
一文打通软件测试中pytest框架
948
vscode远程调试python程序,基于debugpy库
318
正点原子HP20智能加热台,重新定义精密加热
716
K8S 中使用 YAML 安装 ECK
1003
一种可落地的任务令牌锁机制:设计原理、实
150
Flink学习笔记:状态类型和应用
581
Oracle19c impdp失败报ORA-20000案例
205
Markdown写作常用组件
714
fs1.6-fs1.10代码移植方案
49
大疆不同任务类型执行逻辑,上云API源码分
547
对标MinIO!全新一代分布式文件系统诞生!
247
上海房屋漏水反复修不好?芮生建设提供免费
927
2025 年度西安网站制作公司推荐:定制开发
414
15.结构型 - 组合模式 (Composite Pattern)
173
C++ 语言特性的变更可能让你的防御成为马奇
280
CentOS 7 上 yt-dlp Youtube高画质下载问题