mysql如何通过调整Undo Log优化并发性能_优化innodb_max_undo_log_size

Undo Log 过大导致 purge 线程卡住、事务变慢,根本原因是长事务阻塞清理,需调小 innodb_max_undo_log_size(128M~256M)、开启 innodb_undo_log_truncate、增加 innodb_purge_threads 数量,并监控长事务和 INNODB_METRICS 指标。Undo Log 太大导致 purge 线程卡住,事务变慢InnoDB 的 undo_log 不是写完就删,而是等所有依赖它的事务(包括长事务、未提交事务、MVCC 可见性需要的旧版本)都结束后,才由 purge 线程异步清理。如果 innodb_max_undo_log_size 设得过大(比如默认 1GB),单个 undo 表空间文件膨胀后,purge 扫描和回收效率会明显下降,尤其在高并发更新场景下,容易堆积大量未 purge 的 undo 记录,拖慢整个系统的响应。实操建议:innodb_max_undo_log_size 建议设为 128M~256M(即 134217728~268435456),避免单个 undo 表空间"一枝独大";必须配合启用 innodb_undo_log_truncate=ON(MySQL 5.7+ 默认开启),否则调小该值无效;调整后需等待一次自动 truncate 周期(默认每 12800 秒触发一次,由 innodb_undo_log_truncate 和 innodb_max_undo_log_size 共同控制)才会真正收缩文件;观察 SHOW ENGINE INNODB STATUS 中的 PURGE DONE 进度,以及 information_schema.INNODB_METRICS 里 undo_log_truncations 计数是否上升。为什么不能直接调小 innodb_undo_tablespaces 数量很多人误以为减少 undo 表空间数量(innodb_undo_tablespaces)能降低开销,其实反了:它只影响 undo 表空间文件个数(默认 128),不控制总大小,也不影响 purge 效率。真正起作用的是每个表空间的上限(innodb_max_undo_log_size)和是否允许截断(innodb_undo_log_truncate)。实操建议:innodb_undo_tablespaces 建议保持默认(128)或至少 ≥ 36,太少会导致多个 undo 段挤在一个文件里,反而加剧锁争用;该参数只能在实例初始化时设置(mysqld --initialize 阶段),运行中不可修改;如果已上线且值过小(如 2),不要强行改------没有安全在线调整路径,硬改会导致启动失败。长事务是 undo 堆积的真正元凶,比参数调优更关键再小的 innodb_max_undo_log_size 也扛不住一个运行 2 小时的未提交事务:它会阻止 purge 清理所有早于该事务快照的 undo 记录,导致 undo 文件持续增长、历史链变长、MVCC 查找变慢。这时调参只是掩耳盗铃。 通义听悟 阿里云通义听悟是聚焦音视频内容的工作学习AI助手,依托大模型,帮助用户记录、整理和分析音视频内容,体验用大模型做音视频笔记、整理会议记录。

相关推荐
databook1 小时前
使用 SciPy 库进行时间序列分析
python·数据分析·scipy
java资料站1 小时前
十一、评估测试
开发语言·人工智能·python
白帽攻防录2 小时前
SRC 挖洞:Roundcube 预认证 SQL 注入深度复盘,CVE-2026-48842 preg_replace 转义绕过怎么打穿邮件系统
网络·数据库·sql·网络安全·sql注入
szial2 小时前
网络爬虫与 CDP 实战(二):浏览器能访问,Python 却被拒绝?拆开登录态与 CSRF
爬虫·python·csrf
꯭自꯭闭꯭2 小时前
达梦SQL优化相关
linux·运维·数据库·sql
对空六课2 小时前
支持注意力分析的热力图工具有哪些?
前端·数据库·数据分析
青少儿编程课堂2 小时前
后缀自动机解析:本质不同子串与最长重复片段统计
c++·python·算法·bfs·信息学竞赛
南京码讯光电技术有限公司3 小时前
How to Design an Antenna System for an Industrial WiFi Module
数据库·人工智能
怕浪猫3 小时前
LLM 面试必问的 8 个问题,答不上来直接淘汰
人工智能·python·面试
lusklusklusk4 小时前
Oracle数据库基础之2_体系结构
数据库·oracle