InnoDB存储引擎

InnoDB是一个高性能,高可用,高扩展性的存储引擎。

InnoDB体系架构

InnoDB存储引擎

InnoDB存储引擎有多个内存块,这些内存块组成一个大的内存池。

后台线程

InnoDB是一个多线程的结果,后台有很多线程,负责处理不同的任务:

  • Master thread
    负责将缓冲区的数据异步的刷新到磁盘上。
  • IO thread
    InnoDB中使用了大量的异步线程来处理I/O;该线程主要负责这些请求的回调处理;
  • purge thread
    事务被提交后,所使用的undo日志就不需要了,需要该线程来回收已经使用的undo页;
  • page cleaner thread
    将脏页的刷新操作放在单独的该线程中执行;

内存

缓冲池

InnoDB是基于磁盘存储的,其中的记录按照页来管理。由于磁盘速度和CPU速度的差别,需要缓冲池来提高性能。
InnoDB的缓冲池:
缓冲池存储的数据页类型有:

  • 数据页
  • 索引页
  • undo页
  • 插入缓冲
  • 自适应哈希索引
  • 锁信息
  • 数据字典信息
缓冲池

缓存页管理

InnoDB的缓存池是一块很大的内存区域;以页的形式来组织,里面存放着各种类型的页;如何对这些页进行管理呢?
数据库中的缓冲池通常通过LRU(最近最少使用)算法来管理;即需要一个LRU的list来存放这些页,最常使用的放在前面,最少使用的放在最后,当容量不够时,先释放最后最少使用的页;页的默认大小是16KB。
对于数据库的索引和数据的扫描操作;有可能会把热点的页置换出去,这样下次访问依然要磁盘读取;这种情况下,对LRU算法做了修改,加入了midpoint的概念;新的页会被先加载到midpoint的位置;然后一个时间阈值后自动的添加到LRU列表头。

改进的算法有点类型JVM里的年轻代和老年代的算法;对象先被分配在年轻代,当轮询过一定的次数后,对象被加载到老年代。

checkpoint机制主要分为两种:

  • sharp checkpoint:数据库关闭时,将所有脏页刷回磁盘;
  • fuzzy checkpoint:数据库运行时,刷新一部分页回磁盘;

fuzzy checkpoint的时机:
master thread checkpoint
flush_lru_list checkpoint
async/sync flush checkpoint
dirty page too much checkpoint

InnoDB关键特性

  • Change Buffer
  • Double Write
  • 自适应哈希索引
  • 异步IO
  • 邻居页刷新

你可能感兴趣的:(InnoDB存储引擎)