
MySQL日志之撤销日志undo log
发布日期:2021-05-08 15:26:20
浏览次数:15
分类:精选文章
本文共 2724 字,大约阅读时间需要 9 分钟。
MySQL Undo Log: 结构与管理
Undo log是MySQL中一个关键的功能,用于支持事务的回滚和一致性非锁定读(MVCC)。通过对Undo Log的理解和管理,可以有效地优化数据库性能和保证数据一致性。本文将从基本概念、相关参数、结构以及管理策略等方面详细探讨Undo Log。
1.1 Undo Log的基本概念
Undo log(逻辑日志)记录了数据库变更操作的反向操作,主要用于以下两种场景:
- 事务回滚:在事务提交后发现需要回滚时,undo log能够提供事务恢复所需的信息。
- 一致性非锁定读(MVCC):通过undo log,读操作可以看到事务开始时的数据版本,确保一致性。
Undo log分为两种类型:
- Insert Undo Log:用于记录INSERT操作的反向操作。由于这些日志仅在事务范围内可见,提交后可以直接删除,无需额外存储。
- Update/ Delete Undo Log:用于记录UPDATE和DELETE操作的反向操作。由于这些操作可能影响多个版本,undo log需要长期存储,直到purge线程将其清除。
1.2 相关参数与视图
通过查看MySQL的系统视图和参数,可以更好地了解Undo Log的配置和使用情况。以下是相关参数的示例:
mysql> show variables like '%undo%';+--------------------------+-------------------+| Variable_name | Value |+--------------------------+-------------------+| innodb_max_undo_log_size | 4294967296 || innodb_undo_directory | /data/mysql8/data || innodb_undo_log_encrypt | OFF || innodb_undo_log_truncate | ON || innodb_undo_tablespaces | 2 |+--------------------------+-------------------+
mysql> show variables like '%purge%';+--------------------------------------+--------------------------------------------+| Variable_name | Value |+--------------------------------------+--------------------------------------------+| gtid_purged | 6ac2c3ad-c5b7-11ea-8d1a-00163e0c8a51:1-304 || innodb_max_purge_lag | 0 || innodb_max_purge_lag_delay | 0 || innodb_purge_batch_size | 300 || innodb_purge_rseg_truncate_frequency | 128 || innodb_purge_threads | 4 || relay_log_purge | ON |+--------------------------------------+--------------------------------------------+
这些参数控制了undo log的大小、存储位置以及purge线程的工作方式。理解这些参数有助于优化数据库性能。
1.3 Undo Log的结构
Undo Log由回滚段(rollback segment)组成,MySQL默认支持128个回滚段。每个回滚段包含1024个undo log segment。undo log的主要特点包括:
- 存储结构:undo log使用Undo表空间存储,支持多个独立表空间。
- 分布管理:
- Slot 0:预留给系统表空间。
- Slot 1-32:预留给临时表空间。
- Slot 33-127:用于独立Undo表空间(若支持)。
- Slot 128-255:用于系统表空间(若不支持独立表空间)。
图片内容已去除,建议关注相关技术文档以获取更多信息。
1.4 Undo Log的purge管理
Undo Log的管理关键在于purge线程。以下是purge线程的主要职责:
- 事务提交时机:在事务提交时,将undo log放入删除列表,等待purge线程处理。
- 重用策略:提交时检查undo log页面是否可重用,若可重用则分配给后续事务,减少存储占用。
- 操作类型影响:
- INSERT:在提交后直接删除,且不需要purge。
- DELETE/UPDATE:标记为删除,需等待purge线程清理。
- UPDATE主键列:先删除旧记录,再插入新记录,undo log需记录两次操作。
通过优化purge线程和相关参数,可以有效管理undo log存储,提升数据库性能。
总结
Undo Log是MySQL事务管理的核心机制,理解其结构和管理策略对数据库优化至关重要。通过合理配置参数和监控undo log的使用情况,可以最大限度地提升数据库性能,同时保证数据一致性。
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年04月13日 03时39分06秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Vue3发布半年我不学,摸鱼爽歪歪,哎~就是玩儿
2019-03-06
《实战java高并发程序设计》源码整理及读书笔记
2019-03-06
Java开源博客My-Blog(SpringBoot+Docker)系列文章
2019-03-06
程序员视角:鹿晗公布恋情是如何把微博搞炸的?
2019-03-06
【JavaScript】动态原型模式创建对象 ||为何不能用字面量创建原型对象?
2019-03-06
Linux应用-线程操作
2019-03-06
多态体验,和探索爷爷类指针的多态性
2019-03-06
系统编程-进程间通信-无名管道
2019-03-06
记2020年初对SimpleGUI源码的阅读成果
2019-03-06
C语言实现面向对象方法学的GLib、GObject-初体验
2019-03-06
系统编程-进程-ps命令、进程调度、优先级翻转、进程状态
2019-03-06
为什么我觉得需要熟悉vim使用,难道仅仅是为了耍酷?
2019-03-06
一个支持高网络吞吐量、基于机器性能评分的TCP负载均衡器gobalan
2019-03-06
HDOJ2017_字符串统计
2019-03-06
高等软工第二次作业《需求分析阶段总结》
2019-03-06
404 Note Found 团队会议纪要
2019-03-06
CentOS安装Docker-ce并配置国内镜像
2019-03-06
使用JWT作为Spring Security OAuth2的token存储
2019-03-06