深入理解InnoDB存储引擎:逻辑存储结构、事务原理
![](/theme/default/default/images/main/eye-open.png)
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
![](/theme/default/default/images/main/icon-jing.png)
今日目标
- 理解逻辑存储结构
- 理解事务原理
- 理解 redo log
- 理解 undo log
1. 逻辑存储结构
InnoDB存储引擎的逻辑存储结构包括表空间、段、区、页和行。表空间是最高层结构,可以有多个,存储记录和索引。每张表默认有自己的表空间文件。段管理多个区,分为数据段和索引段,对应B+树的叶子节点和非叶子节点。区是1M大小的表空间单元,包含64个连续页,而页是16KB大小的磁盘管理单元。行是数据存放的基本单位,包含两个隐藏字段Trx_id和Roll_pointer,分别用于记录事务ID和指向修改前版本的undo日志。
2. 事务原理
事务是一组不可分割的操作集合,遵循ACID属性,分别代表原子性、一致性、隔离性和持久性。InnoDB通过redo log和undo log来保证原子性、一致性和持久性,而隔离性通过锁和MVCC实现。
2.1. 事务介绍
事务处理意味着一系列操作要么全部成功,要么全部失败,确保数据库状态的一致性。
2.1.1. 事务特性
原子性保证事务为最小操作单元,一致性确保事务执行后数据库状态一致,隔离性控制事务相互影响,持久性确保事务提交后改变永久保存。
3. redo log
redo log用于记录数据页的物理修改,保证事务持久性。它由重做日志缓冲和重做日志文件组成,分别存储在内存和磁盘上。redo log缓冲中记录的数据页变化,在事务提交时刷新到磁盘文件,确保即使发生错误也能依靠redo log恢复数据。
3.1. redo log作用
没有redo log可能导致数据没有实时持久化,出错时无法恢复。redo log通过WAL(Write-Ahead Logging)先写日志后写磁盘,提高效率并保证持久性。
4. undo log (回滚日志)
undo log记录数据修改前的信息,提供回滚操作和支持MVCC。与redo log不同,它是逻辑日志,记录相反操作的信息。事务提交后,undo log不会立即删除,因为可能用于MVCC,它存储在回滚段中。
想要了解更多内容?
![](/theme/default/default/images/main/icon-jing.png)
![](https://cdn.easycorp.cn/rongpm/upload/202312/f_39217d624bb2b42ce8f6322ebd7e573a.png)
![](https://cdn.easycorp.cn/rongpm/upload/202312/f_39217d624bb2b42ce8f6322ebd7e573a.png)