一文了解mysql的三大核心组件双写缓存(double write buffer)、自适应哈希索引(adaptive hash index)、Buffer Pool。同时了解Mysql的存储体系结构
Mysql体系结构图
三大核心架构
双写缓存(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的存储体系
- 页中包含很多行记录,通常页为16kb
- 64个页组成一个区
- 一个索引会生成2个段,一个叶子节点段(存储叶子节点),一个非叶子节点段(存储非叶子节点)。
- 表空间(多个页的池子):每一个页都对应着一个页号,这个页号由4个字节组成,也就是32个比特位,所以一个表空间最多可以拥有2的32次方个页,如果按照页的默认大小16KB来算,一个表空间最多支持64TB的数据。
结束语
- 获取更多有价值的文章,让我们一起成为架构师!
- 关注公众号,可以让你逐步对MySQL以及并发编程有更深入的理解!
- 这个公众号,无广告!!!每日更新!!!