(1)数据页的各个部分:
    每个数据页实际上默认的大小是16KB,那么16KB的大小就是存放大量的数据行嘛?
    明显不是的,其实一个数据页拆分成很多个部分:
    大体上包含了 文件头,数据页头,最小记录,最大记录,多个数据行,空闲空间,数据页目录,文件尾部
    文件头占38个字节,数据页占56个字节,最大和最小记录占26个字节,数据行区域的大小是不固定的,空闲区域的大小也是不固定的,数据页目录的大小也是不固定的,文件尾部占8个字节。

    (2)数据页如何加载数据?
    假设要插入一行数据,此时数据库一条数据都没有,那应该先是从磁盘上加载一个空的数据页到BufferPool的缓存页,缓存页和数据页一一对应,在磁盘上是数据页,数据页加载到BufferPool里就是缓存页。
    插入一行数据就是在数据行那块区域插入一行数据,然后空闲区域的空间会减少一些。当不停的插入数据到这个缓存页里去,直到它的空闲区域都耗尽了,就是这个页满了,而且在更新缓存页的同时,他在lru链表里的位置会不停的移动,而且肯定会在flush链表里,所以最终一定会通过后台IO线程根据lru链表和flush链表,把这个脏页刷到磁盘上去。

    这就是对数据页的整体存储结构的初步介绍,以及MySQL实际运行过程中,数据页的使用。数据页结构
    30.png