0

0

事务对性能有什么影响_mysql性能关系分析

P粉602998670

P粉602998670

发布时间:2026-01-20 08:44:46

|

463人浏览过

|

来源于php中文网

原创

事务显著影响MySQL性能,核心在于锁管理、redo/undo日志写入、一致性校验及提交回滚开销;长事务、大事务、事务内非DB操作和不必要显式事务最伤性能;应通过读写分离、分批提交、调低隔离级别和监控拦截来平衡一致性与性能。

事务对性能有什么影响_mysql性能关系分析

事务会显著影响 MySQL 的性能,核心在于它引入了额外的开销:锁管理、日志写入(redo log、undo log)、一致性校验和提交/回滚逻辑。合理使用事务能保障数据正确性,但滥用或设计不当会拖慢查询、增加锁冲突、消耗更多 I/O 和内存。

事务带来的主要性能开销

MySQL 执行一个事务,不只是执行 SQL 语句本身,还要完成一系列配套动作:

  • Redo log 写入:每次事务修改数据前,必须先将变更记录写入 redo log(即使还没刷盘),这是为了崩溃恢复。频繁小事务会导致大量随机小写,加重磁盘 I/O 压力。
  • Undo log 维护:为支持 MVCC 和回滚,事务运行中要持续生成 undo 日志。长事务会阻止 purge 线程清理旧版本,导致 undo 表空间膨胀、历史版本链变长,影响 SELECT 性能。
  • 行锁/间隙锁争用:事务中涉及 UPDATE/DELETE/SELECT ... FOR UPDATE 时,InnoDB 会加锁。并发事务访问相同数据范围,容易触发锁等待甚至死锁,造成响应延迟或超时。
  • 事务状态管理开销:每个活跃事务需维护 trx 结构体、活跃事务列表(trx_list)、read view 等,高并发下这些内存结构和全局锁(如 lock_sys->mutex)可能成为瓶颈。

哪些事务行为最伤性能

不是事务本身有问题,而是某些使用方式放大了代价:

网人信息发布系统(WRMPS) 2008 SP2 build 0718
网人信息发布系统(WRMPS) 2008 SP2 build 0718

因为这几个版本主要以系统的运行稳定着想, 所以在功能方面并没什么大的改进,主要是对系统的优化,及一些BUG或者不太人性化的地方修改,此次版本在速度上较上版本有了50%左右的提升。WRMPS 2008 SP2 升级功能说明1,新增伪静态功能2,新增全屏分类广告功能3,新增地区分站代理功能!4,新增分站独立顶级域名支持5,新增友情连接支持分城市功能6,新增支持百度新闻规范7,新增自由设置关键词及网页

下载
  • 长事务(Long-running transaction):执行时间长达数秒甚至分钟。它会持有锁不放、阻塞其他事务,同时让 MVCC 版本链无法回收,极大拖慢只读查询。
  • 大事务(Big transaction):一次性修改几十万行。会产生海量 undo/redo 日志,写日志、刷盘、回滚段扩展都耗时;还可能触发自动提交失败或锁升级(虽 InnoDB 不升级锁,但锁数量剧增)。
  • 在事务中做非数据库操作:比如调用外部 HTTP 接口、文件读写、复杂计算等。这会让事务空占锁和资源,人为拉长事务生命周期。
  • 不必要的显式事务:对单条 SELECT 或只读场景加 BEGIN/COMMIT,虽无写操作,但仍会创建 read view、参与事务链表,徒增轻量开销。

如何平衡一致性与性能

关键是在保证业务逻辑正确的前提下,最小化事务影响范围:

  • 读写分离事务边界:把 SELECT 拆出来,放在事务外执行;只在真正需要原子更新的地方开启事务(如“扣库存+生成订单”必须包在一起)。
  • 批量操作分批次提交:处理 10 万行更新时,不要一口吞,按 1000~5000 行一批,每批独立事务。既控制锁持有时间,又避免单次日志过大。
  • 设置合适隔离级别:多数业务用 READ COMMITTED 足够,比默认的 REPEATABLE READ 减少 gap lock 使用,降低死锁概率;仅强一致性场景才启用 SERIALIZABLE。
  • 监控并拦截异常事务:通过 information_schema.INNODB_TRX 查看 trx_state、trx_started、trx_rows_locked;配合 pt-kill 或自定义脚本 kill 运行超 30 秒的事务。

附:快速判断事务是否成瓶颈的方法

登录 MySQL 后运行这几条命令,能快速定位问题:

  • SHOW ENGINE INNODB STATUS\G → 关注 TRANSACTIONS 部分,看是否有大量 “lock wait” 或长时间未提交事务。
  • SELECT * FROM information_schema.INNODB_TRX ORDER BY trx_started LIMIT 10; → 查出最早开始的 10 个事务,重点关注 trx_state='RUNNING' 但 trx_started 很早的。
  • SHOW GLOBAL STATUS LIKE 'Com_commit'; SHOW GLOBAL STATUS LIKE 'Com_rollback'; → 对比提交/回滚比例,若 rollback 过高,说明业务逻辑或异常处理有问题。
  • 检查 Innodb_row_lock_waits 和 Innodb_row_lock_time_avg → 这两个值持续升高,代表锁竞争已影响性能。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

683

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

321

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

348

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1095

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

357

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

677

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

575

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

417

2024.04.29

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

3

2026.01.20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.8万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 801人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号