Mysql体系结构图.png
三大核心架构双写缓存(doublewritebuffer)一种特殊文件flush技术,带给InnoDB存储引擎的是数据页的可靠性。doublewritebuffer是InnoDB在表空间上的个页(2个区,extend1和extend2),大小是2MB。在把页写到数据文件之前,InnoDB先把它们写到一个叫doublewritebuffer(双写缓冲区)的连续区域内,在写doublewritebuffer完成后,InnoDB才会把页写到数据文件的适当的位置。如果在写页的过程中发生意外崩溃,InnoDB在稍后的恢复过程中在doublewritebuffer中找到完好的page副本用于恢复。引入的原因:页的大小16K,每次可以写入4K,断电等意外情况,mysql不能保证这个刷新磁盘的原子性。
使用双写缓冲区功能,InnoDB/XtraDB首先将页面写入双写缓冲区,然后写入数据文件。
如果在数据文件中发生部分页面写入,InnoDB/XtraDB将检查恢复是否数据文件中页面的校验和与doublewrite缓冲区中页面的校验和不同,因此将知道页面是否已损坏或不。如果它已损坏,恢复过程将使用存储在doublewrite缓冲区中的页面来恢复正确的数据。
如果在doublewrite缓冲区中发生部分写入,则原始页面不受影响,可以与重做日志一起使用以恢复数据。
自适应哈希索引(adaptivehashindex)Innodb存储引擎会监控对表上二级索引的查找,如果发现某二级索引被频繁访问,二级索引成为热数据,建立哈希索引可以带来速度的提升。简单说就是把经常使用的数据进行缓存。
BufferPool之前文章有详细介绍,这里只做简单的介绍是一块内存区域,当数据库操作数据的时候,把硬盘上的数据加载到bufferpool,不直接和硬盘打交道,操作的是bufferpool里面的数据数据库的增删改查都是在bufferpool上进行,和undolog/redolog/redologbuffer/binlog一起使用,后续会把数据刷到硬盘上
MySQL的存储体系MySQL的存储体系.png
页中包含很多行记录,通常页为16kb64个页组成一个区一个索引会生成2个段,一个叶子节点段(存储叶子节点),一个非叶子节点段(存储非叶子节点)。表空间(多个页的池子):每一个页都对应着一个页号,这个页号由4个字节组成,也就是32个比特位,所以一个表空间最多可以拥有2的32次方个页,如果按照页的默认大小16KB来算,一个表空间最多支持64TB的数据。