Mysql中InnoDB的体系结构:三大核心组件与存储结构

Mysql体系结构图

Mysql体系结构图.png

三大核心架构

双写缓存(double write buffer)

  • 一种特殊文件flush技术,带给InnoDB存储引擎的是数据页的可靠性。
  • doublewrite buffer是InnoDB在表空间上的128个页(2个区,extend1和extend2),大小是2MB。
  • 在把页写到数据文件之前,InnoDB先把它们写到一个叫doublewrite buffer(双写缓冲区)的连续区域内,在写doublewrite buffer完成后,InnoDB才会把页写到数据文件的适当的位置。
  • 如果在写页的过程中发生意外崩溃,InnoDB在稍后的恢复过程中在doublewrite buffer中找到完好的page副本用于恢复。
  • 引入的原因:页的大小16K,每次可以写入4K,断电等意外情况,mysql不能保证这个刷新磁盘的原子性。
  • 使用双写缓冲区功能,InnoDB / XtraDB首先将页面写入双写缓冲区,然后写入数据文件。
  • 如果在数据文件中发生部分页面写入,InnoDB / XtraDB将检查恢复是否数据文件中页面的校验和与doublewrite缓冲区中页面的校验和不同,因此将知道页面是否已损坏或不。如果它已损坏,恢复过程将使用存储在doublewrite缓冲区中的页面来恢复正确的数据。
  • 如果在doublewrite缓冲区中发生部分写入,则原始页面不受影响,可以与重做日志一起使用以恢复数据。

自适应哈希索引(adaptive hash index)

  • Innodb存储引擎会监控对表上二级索引的查找,如果发现某二级索引被频繁访问,二级索引成为热数据,建立哈希索引可以带来速度的提升。
  • 简单说就是把经常使用的数据进行缓存。

Buffer Pool

  • 之前文章有详细介绍,这里只做简单的介绍
  • 是一块内存区域,当数据库操作数据的时候,把硬盘上的数据加载到buffer pool,不直接和硬盘打交道,操作的是buffer pool里面的数据
  • 数据库的增删改查都是在buffer pool上进行,和undo log/redo log/redo log buffer/binlog一起使用,后续会把数据刷到硬盘上

MySQL的存储体系

MySQL的存储体系.png

  • 页中包含很多行记录,通常页为16kb
  • 64个页组成一个区
  • 一个索引会生成2个段,一个叶子节点段(存储叶子节点),一个非叶子节点段(存储非叶子节点)。
  • 表空间(多个页的池子):每一个页都对应着一个页号,这个页号由4个字节组成,也就是32个比特位,所以一个表空间最多可以拥有2的32次方个页,如果按照页的默认大小16KB来算,一个表空间最多支持64TB的数据。

结束语

  • 获取更多有价值的文章,让我们一起成为架构师!
  • 关注公众号,可以让你逐步对MySQL以及并发编程有更深入的理解!
  • 这个公众号,无广告!!!每日更新!!!
    作者公众号.jpg
posted @ 2021-12-28 23:49  程序java圈  阅读(110)  评论(0编辑  收藏  举报