MySQL InnoDB 概述

MySQL InnoDB 存储引擎
概述
  • 支持事务
    • 行锁设计
    • 支持MVVC
    • 支持外键
    • 提供一致性非锁定读
体系架构
image.png
  • 后台线程(多线程模型)
    • Master Thread
      负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性,包括脏页的刷新、合并插入缓存、UNDO页的回收。
    • IO Thread
      使用AIO处理写请求,IO Thread负责IO请求的回调处理
    • Purge Thread
      事务提交后,回收已经使用并且分配的undo页。
  • 内存
    • 缓冲池
      InnoDB是基于磁盘存储的,并将其中的记录按照页的方式进行管理,使用缓冲池技术来提高数据库的整体性能。(读取页的时候,将页放到缓冲池中(FIX操作),下次读缓冲池中的即可;修改页时,先修改缓冲池中的页,再以一定的频率刷新到磁盘(CheckPoint机制))
      • 缓冲池管理
        数据库中的缓冲池通过LRU算法进行管理(LRU List),使用最频繁的页在LRU List的前端,当缓冲池中不能存放新读取到的页时,首先释放LRU列表尾端的页。
    • 重做日志缓冲
      InnoDB将重做日志信息放入该缓冲区,然后按照一定的频率将其刷新到重做日志文件。
    • CheckPoint机制
      • 缩短数据库恢复时间:
        数据库宕机时,数据库不需要重做所有的日志因为CheckPoint之前的页都已经刷新回磁盘。
      • 缓冲池不够用时,将脏页刷新到磁盘(Fuzzy CheckPoint 部分刷新)
        当缓冲池不够用时,根据LRU算法,释放list尾端的页,若该页为脏页,则强制执行CheckPoint,刷新回磁盘。
      • 重做日志不可用时,刷新脏页
        因为重做日志不是无限增大的,当到达一定数量时,由第一条所述,数据库恢复不需要这部分重做日志,这部分就可以被覆盖重用,若此时重做日志还有用,那么强制产生CheckPoint,将缓冲池中的页至少刷新到当前重做日志的位置。
        总结一下:缓冲池不够用时,将最少使用的脏页刷新回磁盘,释放该页;当重做日志不够用时,将缓冲池刷新到当前重做日志的位置,放弃一部分重做日志,用于新的重做日志;数据库关闭时,发生Sharp CheckPoint,全部刷新
  • InnoDB 关键特性
    • 插入缓冲
    • 两次写
    • 自适应哈希索引
    • 异步IO
    • 刷新邻接页

你可能感兴趣的:(MySQL InnoDB 概述)