InnoDB存储引擎详解(看这篇就够了)

InnoDB存储引擎详解(看这篇就够了)-mikechen

InnoDB存储引擎是MySQL的默认存储引擎,要掌握好MySQL需要深入学习InnoDB存储引擎@mikechen

InnoDB存储引擎介绍

InnoDB是MySQL数据库管理系统中的一个存储引擎,目前是MySQL的默认存储引擎。

 

InnoDB存储引擎架构

InnoDB存储引擎的体系架构,包括以下关键组件:

InnoDB存储引擎详解(看这篇就够了)-mikechen

1.后台线程

InnoDB存储引擎在后台运行多个线程,这些线程负责执行各种关键任务:

  1. 主线程(Main Thread): 这是InnoDB存储引擎的主线程,负责处理一些全局的管理任务。
  2. IO线程(IO Thread):InnoDB 存储引擎在后台运行多个 I/O 线程,用于处理与磁盘之间的读写操作,以及与重做日志文件的交互。
  3. 刷新线程(Flush Thread): 刷新线程负责将缓冲池中的脏数据,已修改但尚未写入磁盘的数据,刷新到磁盘中的数据文件。
  4. 清理线程(PurgeThread): purge thread 的主要作用是清理掉,事务被提交之后,不再需要undo页。
  5. 日志写入线程(Log Write Thread): 该线程负责将重做日志(Redo Log)写入磁盘,重做日志记录了数据库的变更操作,以确保事务的持久性和数据一致性。

 

2.缓冲池(Buffer Pool)

缓冲池是InnoDB存储引擎的核心组件,是一个内存区域,用于缓存数据库中的数据和索引页。

缓冲池的作用:

  • 减少磁盘I/O:InnoDB缓冲池存储了经常访问的数据页,当需要读取数据时,首先检查缓冲池中是否存在数据页,如果存在就可以避免从磁盘读取,从而减少了磁盘I/O操作。
  • 提高读写性能:由于内存的访问速度远高于磁盘,将数据页保留在缓冲池中可以显著提高读写操作的性能。

缓冲池管理:

  • LRU算法:InnoDB使用LRU最近最少使用算法来管理缓冲池中的数据页,当需要新的空间时,会将最久未使用的数据页移出缓冲池,为新的数据页腾出空间。
  • 脏页:数据页可能会被修改,这些被修改但尚未写回磁盘的数据页称为脏页。InnoDB使用“脏页”列表来管理这些页,定期将脏页写回磁盘,以保持数据的一致性。

 

3.重做日志(Redo Log)

MySQL 的重做日志(Redo Log)是一种事务日志,用于记录已提交的事务对数据库数据所做的更改。

 

Redo Log的作用

重做日志主要用于恢复和持久性,当事务提交时,相应的数据更改首先被记录到重做日志中,然后再写入数据库的实际数据文件。

当事务进行数据修改,比如:插入、更新、删除时,相关的修改操作被记录到重做日志中,而不是立即写入到数据页中。

这样做的目的是,即使在数据库崩溃的情况下,通过重做日志可以将已提交的事务的数据更改重新应用到数据库,从而保持数据的一致性。

 

Redo Log的特点

顺序写入:重做日志是顺序写入的,这使得写入操作相对较快。

循环使用:一旦重做日志写满,系统会回到日志的开头,逐渐覆盖旧的日志记录,这是循环使用的方式。

组提交(Group Commit):多个事务的日志记录可以被一起写入,从而提高写入性能。

 

4.Undo Log日志

Undo 日志记录了事务的反向操作,用于支持事务的回滚和多版本并发控制(MVCC)。

当事务更新数据时,旧的数据版本被保存在 Undo 日志中。

这允许事务在发生回滚时恢复到之前的状态,或者其他事务在执行期间访问旧版本的数据。

Undo 日志的主要作用包括:

事务回滚:如果事务需要回滚,数据库可以使用 Undo 日志中的信息将数据恢复到事务开始前的状态。

快照读:允许事务在执行期间读取一致性的数据版本,而不会受到其他事务的影响。

多版本并发控制(MVCC):支持多个事务同时并发访问数据的不同版本,提高并发性能。

 

4.数据文件和索引文件

InnoDB将表的数据和索引存储在独立的数据文件和索引文件中。

数据文件包含了实际的数据行,而索引文件包含了用于加速数据检索的索引结构。

 

5.锁和并发控制

MySQL 的存储引擎提供了多种锁和并发控制机制,以确保多个事务可以同时访问数据库并保持数据的一致性。

InnoDB支持行级锁定,这意味着并发事务可以在不阻塞其他事务的情况下访问数据。

多版本并发控制(MVCC)允许每个事务在自己的数据版本上操作,从而提供更好的隔离性。

 

6.事务管理

InnoDB遵循ACID事务特性,确保数据的原子性、一致性、隔离性和持久性,它支持提交和回滚操作,使事务能够保持数据的完整性。

 

7.MVCC

InnoDB支持快照读,允许事务在执行期间读取数据的一致版本,而不受其他事务的影响。

MVCC机制使得不同事务之间可以同时读取和修改数据,而不会产生冲突。

 

InnoDB存储引擎总结

InnoDB存储引擎的功能和特点如下:

  1. 事务支持: InnoDB是一个支持事务的存储引擎,可以确保复杂操作的数据完整性和一致性。
  2. 外键约束: InnoDB支持外键关系,可以通过外键约束维护表之间的引用完整性。
  3. 行级锁定: InnoDB支持行级锁定,允许并发事务以更细粒度的方式访问数据,提高了并发性和性能。
  4. 崩溃恢复: InnoDB使用事务日志进行崩溃恢复,使得数据库在异常情况下能够恢复到一致状态。
  5. MVCC: 多版本并发控制允许每个事务在自己的数据版本上操作,从而提供更高的并发性和隔离性。
  6. 事务日志: InnoDB的事务日志记录数据的变更操作,使数据库能够在崩溃后进行恢复和回滚。

总之,InnoDB存储引擎在MySQL数据库中扮演着重要的角色,提供了事务支持、并发控制、数据完整性和高性能等关键特性,使其成为许多应用中的首选引擎。

陈睿mikechen

十余年BAT架构经验,资深技术专家,就职于阿里、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法