InnoDB的架构由内存池和后台线程构成,架构图如图所示
(1)内存根据分工以及存储文件的不同分为缓冲池、重做日志缓冲、额外内存池:
(1)内存根据分工以及存储文件的不同分为缓冲池、重做日志缓冲、额外内存池:
- 缓冲池:InnoDB引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。由于磁盘IO的速度感人,为了提高数据库的整体性能,在内存中划了一块区域作为缓冲池。数据库读取页时,首先将从磁盘读到的页存放在缓冲池中。下次再读相同页时,首先判断该页是否在缓冲池中。若在缓冲池中,称该页被命中,直接读取缓冲池中的页。否则,读取磁盘上的页,由此提高了读取的速度。数据库修改数据操作时,首先修改在缓冲池的页,然后再异步刷新到磁盘上,从而提高改数据的速度。缓冲池中缓存的数据页类型有:索引页、数据页、undo页、插入缓冲、自适应哈希索引、InnoDB存储的锁信息、数据字典信息等。
- 重做日志缓冲:InnoDB首先将重做日志信息放到这个缓冲区,然后按照一定频率将其刷新到重做日志文件。默认1秒钟刷新一次,因此重做日志缓冲一般不需要很大,默认8M。日志在下列3种情况下会刷新重做日志缓冲:(1)每秒将重做日志缓冲刷新到重做日志文件(2)每个事务提交时会将重做日志缓冲刷新到重做日志文件(3)当重做日志缓冲池剩余空间小于1/2时,重做日志缓冲刷新到重做日志文件。
- 额外的内存池:在InnoDB存储引擎中,对内存的管理是通过一种称为内存堆的方式进行的。在对一些数据结构本身的内存进行分配时,需要从额外的内存池中进行申请。
(2)后台线程根据功能不同分为master Thread、IO Thread、Purge Thread、Page Cleaner Thread:
- Master Thread:负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性,包括脏页的刷新、合并插入缓冲、UNDO夜的回收等。
- IO Thread:在InnoDB存储引擎中大量使用异步 IO处理IO请求以提高数据库的性能,IO Thread负责这些IO请求的回调处理。IO Thread 有4类,分别为write、read、insert buffer、log IO thread。
- Purge Thread:由于回收不再需要的undo页。
- Page Cleaner Thread:将缓冲池中脏页(即被修改过于磁盘中数据不一致的页)刷新到磁盘中。