美文网首页
InnoDB存储引擎

InnoDB存储引擎

作者: ericsonyc | 来源:发表于2020-01-29 20:41 被阅读0次

    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存储引擎

          本文链接:https://www.haomeiwen.com/subject/wutvactx.html