撤销表空间:单独管理与回收UNDO日志
详解MySQL 8.0中undo表空间的分离配置、自动截断机制及如何监控undo膨胀,避免长事务导致磁盘爆满。 · 难度:入门 · +10XP
撤销表空间(Undo Tablespace)调优
MySQL 8.0默认将undo日志存储在单独的undo表空间(undo_001、undo_002),而非系统表空间。通过innodb_undo_tablespaces和innodb_undo_log_truncate可控制数量与自动回收。长事务或频繁更新会导致undo膨胀,需监控INFORMATION_SCHEMA.INNODB_METRICS中的undo_truncation相关指标,并合理设置innodb_max_undo_log_size。
-- 查看undo表空间状态
SELECT tablespace_name, file_name, status, size FROM INFORMATION_SCHEMA.FILES WHERE tablespace_name LIKE '%undo%';
-- 手动立即截断(需要先禁用在线的截断)
SET GLOBAL innodb_undo_log_truncate = 0;
ALTER UNDO TABLESPACE innodb_undo_001 DEACTIVATE;
-- 等待purge完成后再激活
ALTER UNDO TABLESPACE innodb_undo_001 ACTIVATE;
SET GLOBAL innodb_undo_log_truncate = 1;