当前位置: 首页 > news >正文

理解 MySQL 行锁:两阶段锁协议与热点更新优化

一、 两阶段锁协议 (2PL)

理解行锁的第一步是掌握两阶段锁协议。在 InnoDB 事务中,行锁的生命周期遵循以下规则:

  • 按需加锁:行锁是在事务执行过程中,需要访问具体行记录时才加上的 。

  • 统一释放:事务持有的所有行锁并不会在 SQL 执行完后立即释放,而必须等到事务提交(Commit)或回滚时才统一释放 。

业务设计启示

这一机制告诉我们:如果一个事务需要锁定多个行,应该将最可能造成锁冲突、最影响并发度的锁尽量往后放

案例:电影票交易业务
假设一笔交易包含扣除顾客余额、增加影院余额、记录日志三个操作 。由于多个事务可能同时更新同一个影院的余额(热点行),最佳的执行顺序是:

  1. 记录交易日志(Insert)
  2. 扣除顾客余额(Update)
  3. 增加影院余额(Update)—— 放在最后,以减少该热点行锁定的时长 。

二、 死锁及其处理策略

当两个或多个事务出现循环资源依赖,互相等待对方释放资源时,就会进入死锁(Deadlock)状态。

InnoDB 提供了两种策略来应对死锁:

  1. 等待超时:事务持续等待直到达到innodb_lock_wait_timeout设置的时间(默认 50s)后报错退出 。

  2. 死锁检测:开启innodb_deadlock_detect(默认开启),系统主动发现死锁链条并回滚其中一个事务,让其他事务继续 。

三、 热点行更新的性能陷阱

虽然死锁检测能快速解开死锁,但在高并发更新同一行的场景下,它会带来巨大的 CPU 开销。

每当一个新请求被阻塞,系统都要检查该请求的加入是否会导致死锁。对于nnn个并发线程,死锁检测的时间复杂度是O(n)O(n)O(n)。当并发数达到 1000 时,检测量级可达百万次,这会导致 CPU 利用率接近 100%,但实际执行的事务却寥寥无几 。

四、 优化热点更新的三个思路

针对这类由死锁检测引起的 CPU 瓶颈,可以从以下维度进行优化:

  • 临时关闭死锁检测:如果能确保业务逻辑本身不会产生死锁,可以关掉检测 。但这可能导致大量事务堆积并触发超时,对业务有损 。

  • 服务端并发控制:在进入引擎层之前进行排队(如在中间件或修改数据库内核),限制同一行同时更新的并发数,从而降低死锁检测的成本 。

  • 数据拆分(逻辑多行):将热点行拆分为多行记录 。例如,将影院账户余额分散到 10 条记录中,总余额为各行之和 。更新时随机选择一行进行操作,可将冲突概率降低到原来的1/101/101/10,显著减少锁等待和 CPU 消耗 。

http://www.jsqmd.com/news/791484/

相关文章:

  • 用OneNET平台快速搭建你的第一个智慧农业监控系统(HTTP协议接入实战)
  • 手把手教你用NET30-CS桥接器搞定欧姆龙CP/CJ系列PLC的ModbusTCP通讯(附地址映射表)
  • ANSYS Workbench接触分析实战:从算法选择到收敛难题破解
  • 抖音视频无水印保存到相册怎么操作?2026实测无水印保存方法全汇总 - 科技热点发布
  • 实战解析:基于51单片机的可控硅调光系统设计,附光耦过零检测与安全调试心得
  • 小红书视频怎么去水印保存?小红书保存视频去水印方法2026实测全攻略 - 科技热点发布
  • 通过Vector CANoe/CANalyzer系统变量构建CAN信号运算模型,实现精准关联分析
  • 不止于经纬度:深入挖掘DJI无人机照片EXIF,用Python解析航向角、横滚角等飞行姿态数据
  • HDLbits刷题避坑指南:Shift Register与Down Counter融合设计中的常见思维误区
  • 大模型缓存冷启动灾难应对手册(SITS大会唯一入选IEEE实战案例,含TensorRT+Redis混合缓存配置模板)
  • 【限时解密】Git for AI不是插件,而是新范式:20年SCM专家亲述如何重构CI/CD为CI/CD/AI(附奇点大会未公开Benchmark)
  • 为Claude Code配置Taotoken密钥,解决访问不稳定与额度问题
  • 无水印短视频下载工具推荐:2026免费去水印工具怎么选?哪款下载最干净? - 科技热点发布
  • AI原生系统稳定性骤降47%的元凶曝光(SITS 2026压测报告首次解禁)
  • 去水印后和原视频一样的方法有哪些?2026视频去水印无损工具推荐与实测 - 科技热点发布
  • 微博视频去水印用什么工具?2026实测推荐:在线工具、软件、小程序全盘点 - 科技热点发布
  • 从ChatGPT对话到UML用例图:SITS 2026原生需求流水线实录(含3个未公开的领域本体映射规则)
  • 抖音在线去水印怎么操作?2026实测平台推荐与解析方法汇总 - 科技热点发布
  • 高交互蜜罐框架Beelzebub:插件化架构与威胁情报实战
  • 如何一键捕获完整网页:Full Page Screen Capture 终极指南
  • 普通索引和唯一索引 查询性能差异
  • SpliceAI深度解析:用深度学习精准预测基因剪接变异的终极指南
  • 告别延时函数!用STM32F103的TIM3 PWM精准驱动WS2812灯带(附完整代码)
  • 快手视频怎么去水印?快手下载视频去水印方法+工具推荐【2026实测】 - 科技热点发布
  • 2026年武汉记账报税机构实测:四家专业服务拆解 - 小征每日分享
  • 【2026奇点智能技术大会独家前瞻】:3大未公开技术路线图+白皮书核心框架首次解密
  • 别再只会用切片了!PyTorch Tensor高级索引index_select/masked_select/gather保姆级实战指南
  • 【技术分享】什么是计算机联网?| IBM
  • 如何用WeChatMsg将微信聊天记录永久保存为个人数字资产
  • S型速度曲线进阶:基于Sin²(x)的PLC平滑运动控制实践(以伺服/步进系统为例)