登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
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数据库全方位优化指南:从硬件到架构的深度调优
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数据库全方位优化指南:从硬件到架构的深度调优
3
1012
姬宜欣
2025-11-26
业界
MySQL主从复制:原理、部署、运维与选型全指南
1
331
尚腱埂
2025-11-28
业界
一条SQL在MySQL的执行过程?、MyISAM和InnoDB的区别?
1
965
倡遍竽
2025-11-29
业界
MySQL 8.4未使用 mysql_native_password 却报插件未加载
2
55
恙髡
2025-11-29
业界
MySQL 从入门到删库跑路,保姆级教程!
0
782
都淑贞
2025-12-02
安全
AlmaLinux下mysql 8安装与数据迁移
1
335
菅舛
2025-12-07
安全
Ubuntu下,MySQL密码遗失时修改密码
1
854
徙办
2025-12-07
安全
Ubuntu下,MySQL修改端口号
2
105
痨砖
2025-12-07
业界
DBLens 连接数怎么限制?免费 3 个,订阅随便加
2
608
秤陷曲
2025-12-09
安全
MySQL 筛选条件放 ON 后 vs 放 WHERE 后
1
954
热琢
2025-12-10
回复
(4)
松菊
2025-12-1 22:08:38
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
分享、互助 让互联网精神温暖你我
施婉秀
2025-12-6 12:20:48
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
分享、互助 让互联网精神温暖你我
咫噎
4 天前
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
感谢分享
锄淫鲷
3 天前
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
分享、互助 让互联网精神温暖你我
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
替攀浮
3 天前
关注
0
粉丝关注
17
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
anyue1937
9994893
kk14977
6845357
3934307807
991123
4
xiangqian
638210
5
韶又彤
9998
6
宋子
9983
7
闰咄阅
9993
8
刎唇
9993
9
俞瑛瑶
9998
10
蓬森莉
9951
查看更多
今日好文热榜
759
SRE 踩坑记:JVM 暂停竟然是因为日志
420
时序数据库 TimechoDB V1.3.6 发布 | 优化
577
LLM应用实践: NoteBookLM初次使用
471
阿里云ESA:一起领ESA免费套餐,CDN升级版
929
UModel统一模型AIOps规模化难题
804
假如有10亿QQ号如何去重?
178
接私活必备!一款轻量级、前后端分离的 Jav
301
Flask路由入门指南:从基础定义到优先级与
824
上周热点回顾(12.8-12.14)
586
咱们唠一下:单例Bean的“出生记”——从“
98
PHP 8.6 新增 clamp() 函数
407
解密Prompt系列66. 视觉Token爆炸→DeepSee
408
数据库开发者必装!立即免费下载!
703
MAUI库推荐一:MAUIIcons
169
电脑音频录制工具(语音聊天录音软件)
862
OpenAI Code Interpreter ("Coworker") 架
670
XXL-TOOL v2.4.0 发布 | 布隆过滤器、Excel
689
16.结构型 - 享元模式 (Flyweight Pattern)
366
复健笔记 - Pascal酒吧的爆破
607
[Linux] 手写轻量C++函数性能探查器:CPU占