InnoDB存储引擎

来源:互联网 发布:mac如何备份bootcamp 编辑:程序博客网 时间:2024/05/16 10:41

1、缓冲池

       InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。基于磁盘的数据库系统使用缓冲池技术来提高数据库整体性能。缓冲池就是一块内存区域,通过内存的速度来弥补磁盘速度较慢对数据库性能的影响。数据库读取页时,首先将从磁盘读到的页存放在缓冲池中;数据库修改页时,首先修改缓冲池的页,再以一定的频率刷新到磁盘上。

2、内存管理

      数据库中的缓冲池是通过LRU算法来进行管理的,缓冲池中页的大小默认为16KB。新读取到的页,默认放到LRU列表的midpoint位置,即列表长度的5/8处。可以通过innodb_old_blocks_time来设置页读取到mid位置后需要多久才会被加入到LRU列表的热端。

      数据库刚启动时,LRU列表时空的,这时的页都存放在Free列表中,当需要从缓冲池中分页时,首先从Free列表中查找是否有可用的空闲页,有的话就加入到LRU列表中。

      在LRU列表中的页被修改后,称该页为脏页。FLUSH列表中的页即为脏页列表。

3、重做日志缓冲

      InnoDB存储引擎首先将重做日志信息先放入到这个缓冲区,然后按一定频率将其刷新到磁盘的重做日志文件。会有三种情况进行刷新:

      (1)Master Thread每一秒将重做日志缓冲刷新到重做日志文件;

      (2)每个事务提交时将重做日志缓冲刷新到重做日志文件;

      (3)当重做日志缓冲池剩余空间小于1/2时,重做日志缓冲刷新到重做日志文件。

4、Checkpoint技术

     InnoDB存储引擎通过Checkpoint机制将脏页刷新到磁盘。

     发生的时机:

     Sharp Checkpoint:在数据库关闭时将所有的脏页刷新回磁盘。

     Fuzzy Checkpoint:

     Master Thread Checkpoint:在  Master Thread中发生,差不多以每秒或10秒速度从缓冲池脏页列表中刷新一定比例的页回磁盘。

     FLUSH_LRU_LIST Checkpoint:保证LRU列表至少要有100个空闲页,如果没有,需要将LRU列表尾端的页移出,如果这些页有脏页,需要进行Checkpoint

     Async/Sync Flush Checkpoint:重做日志文件不可用时,即重写重做日志文件时,需要进行Checkpoint将脏页刷新到磁盘

     Dirty Page too much:脏页太多,需要进行Checkpoint

5、后台线程

      InnoDB存储引擎主要工作都是在一个单独的后台线程Master Thread中完成的。其内部由多个循环组成:主循环、后台循环、刷新循环、中断循环,大多数操作都是在主循环中完成的,其中有两部分操作-每秒的操作和每10秒的操作。

6、InnoDB关键特性