
Undo Log 是 InnoDB存储引擎实现事务回滚和多版本并发控制(MVCC)的核心机制,记录事务修改前的数据版本,用于保证事务的原子性和一致性。
参数 | 默认值 | 说明 |
|---|---|---|
innodb_undo_tablespaces | 2 (8.0+) | Undo 表空间数量 |
innodb_undo_directory | ./ | Undo 表空间存储路径 |
innodb_max_undo_log_size | 1GB | 单个 Undo 表空间最大大小 |
innodb_undo_log_truncate | ON | 启用自动截断 |
innodb_purge_threads | 4 | Purge 线程数量 |
innodb_undo_tablespaces
undo_001、undo_002)innodb_undo_directory
datadir)innodb_undo_log_truncate
innodb_purge_threads 优化清理效率-- 查看当前UNDO配置
SHOW VARIABLES LIKE '%innodb_undo%';
-- 修改UNDO表空间存储路径(需重启生效)
SET GLOBAL innodb_undo_directory = '/data/undo_logs';
-- 调整最大UNDO表空间大小
SET GLOBAL innodb_max_undo_log_size = 2GB;
版本差异:MySQL 5.7 需手动配置 innodb_undo_tablespaces 才能启用独立UNDO表空间 磁盘空间:确保UNDO目录有足够空间,避免事务失败 性能优化:适当增加innodb_purge_threads可提升高并发场景的UNDO清理效率
-- 查看 Undo 表空间
SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES
WHERE SPACE_TYPE = 'Undo';
-- 查看事务使用的 Undo Log
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
-- 强制触发 Purge 操作(需超级权限)
SET GLOBAL innodb_fast_shutdown = 0;
innodb_undo_directory = /ssd_data/undo
innodb_undo_tablespaces = 8
innodb_undo_log_truncate = ON
innodb_max_undo_log_size = 2G
-- 监控 Undo 空间使用
SELECT
ROUND(SUM(size)/1024/1024, 2) AS total_undo_mb,
ROUND(SUM(free)/1024/1024, 2) AS free_undo_mb
FROM INFORMATION_SCHEMA.FILES
WHERE FILE_TYPE = 'UNDO LOG';
-- 查找长事务
SELECT * FROM information_schema.INNODB_TRX
WHERE TIME_TO_SEC(TIMEDIFF(NOW(), trx_started)) > 60;
Row Data → Undo Log 1 ← Undo Log 2 ← Undo Log 3
(最新版本) (历史版本)
应急措施:
SET GLOBAL innodb_undo_log_truncate = ON;
SET GLOBAL innodb_max_undo_log_size = 2147483648; -- 2GB
根本解决:
特性 | MySQL 5.7 | MySQL 8.0 |
|---|---|---|
默认表空间 | 共享表空间 | 独立表空间 |
最小表空间数 | 0 | 2 |
在线调整 | 不支持 | 支持动态修改数量 |
ibdata1 文件),所有表数据默认存储在共享表空间中。.ibd 文件),提升管理灵活性和性能。innodb_system(系统表空间)innodb_undo(UNDO 表空间)CREATE TABLESPACE 和 ALTER TABLESPACE),无需重启服务。-- 创建新表空间
CREATE TABLESPACE my_tablespace ADD DATAFILE 'my_tablespace.ibd';
-- 动态修改表空间配置
ALTER TABLESPACE my_tablespace SET AUTOEXTEND_SIZE = 128M;
共享表空间问题
独立表空间优势
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。