【MySQL实战笔记】07 | 行锁功过:怎么减少行锁对性能的影响?-01

简介: 【4月更文挑战第18天】MySQL的InnoDB引擎支持行锁,而MyISAM只支持表锁。行锁在事务开始时添加,事务结束时释放,遵循两阶段锁协议。为减少锁冲突影响并发,应将可能导致最大冲突的锁操作放在事务最后。例如,在电影票交易中,应将更新影院账户余额的操作安排在事务末尾,以缩短锁住关键行的时间,提高系统并发性能。

07 | 行锁功过:怎么减少行锁对性能的影响?

MySQL的行锁是引擎层在各个引擎自己实现的,但并不是所有的引擎都支持行锁。比如MyISAM引擎就不支持行锁,这意味着并发控制只能使用表锁,对于这种引擎的表,同一张表上任何时刻只能有一个更新在执行。InnoDB是支持行锁的。

行锁就是针对数据表中行记录的锁,比如事务A更新了一行,事务B也要更新同一行,那就必须等事务A的操作完成后才能进行更新。

两阶段锁

在下面的操作序列里,事务B的update语句执行时会什么现象?假设字段id是表t的主键。
2024-04-21-10-03-53-image.png

这个问题的结论取决于事务A在执行完两条update语句后,持有哪些锁,以及在什么时候释放。实际上事务B的update语句会被阻塞,直到事务A执行commit之后,事务B才能继续执行。所以事务A持有的两个记录的行锁,都是在commit的时候才释放的。

在InnoDB事务里,行锁是在需要的时候才加上的,但是要等到事务结束才释放,这就是两阶段锁协议。

如果事务中需要锁多个行,要把最可能造成锁冲突、最可能影响并发度的锁尽量往后放。举个例子来说明这段话:

在电影票在线交易业务里,顾客A要在电影院B购买电影票,这个业务可能需要涉及到下面的操作:

  1. 从顾客A账户余额中扣除电影票价

  2. 给影院B的账户余额增加这张电影票价

  3. 记录一条交易记录

整个过程需要update两条记录,insert一条记录,为了保证交易的原子性,需要把这三个操作放在一个事务里,如何安排三个语句在事务中的顺序呢?

如果这时候有顾客C也在影院B买票,事务冲突的部分就是语句2,因为他们需要更新同一个影院账户的余额,需要修改同一行数据。

根据两阶段锁协议,不管怎么安排语句顺序,所有的操作需要的行锁都是在事务提交的时候才释放,如果把语句2安排在最后,影院账户余额这一行的锁时间就最少,最大程度的减少了事务之间的锁等待,提升了并发度。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
12月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
666 158
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
12月前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(中)
使用MYSQL Report分析数据库性能
784 156
|
12月前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(上)
最终建议:当前系统是完美的读密集型负载模型,优化重点应放在减少行读取量和提高数据定位效率。通过索引优化、分区策略和内存缓存,预期可降低30%的CPU负载,同时保持100%的缓冲池命中率。建议每百万次查询后刷新统计信息以持续优化
834 161
|
关系型数据库 MySQL 索引
MySQL多表练习笔记
链接可行,多表查询语法
242 0
|
关系型数据库 MySQL 分布式数据库
Super MySQL|揭秘PolarDB全异步执行架构,高并发场景性能利器
阿里云瑶池旗下的云原生数据库PolarDB MySQL版设计了基于协程的全异步执行架构,实现鉴权、事务提交、锁等待等核心逻辑的异步化执行,这是业界首个真正意义上实现全异步执行架构的MySQL数据库产品,显著提升了PolarDB MySQL的高并发处理能力,其中通用写入性能提升超过70%,长尾延迟降低60%以上。
|
存储 SQL 关系型数据库
京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
|
缓存 关系型数据库 MySQL
MySQL数据库性能调优:实用技术与策略
通过秉持以上的策略实施具体的优化措施,可以确保MySQL数据库的高效稳定运行。务必结合具体情况,动态调整优化策略,才能充分发挥数据库的性能潜力。
861 0
|
SQL 存储 关系型数据库
滴滴面试:明明 mysql 加的是 行锁,怎么就变 表锁 了?
滴滴面试:明明 mysql 加的是 行锁,怎么就变 表锁 了?
|
关系型数据库 MySQL OLAP
无缝集成 MySQL,解锁秒级 OLAP 分析性能极限,完成任务可领取三合一数据线!
通过 AnalyticDB MySQL 版、DMS、DTS 和 RDS MySQL 版协同工作,解决大规模业务数据统计难题,参与活动完成任务即可领取三合一数据线(限量200个),还有机会抽取蓝牙音箱大奖!

推荐镜像

更多