(1)数据库组件:Buffer Pool 的内存结构:
    Buffer Pool 默认情况下128MB,需要进行调整,比如我们数据库是16核32G,可以分配Buffer Pool 2个G的
    内存 innodb_buffer_pool_size=2147483648

    (2)数据页:
    数据库的核心数据模型就是表+行+字段的概念,那么实际存放的时候是什么样的?
    实际上MySQL对数据抽象出了一个数据页的概念,他把很多行数据放在了一个数据页里,也就是说我们的磁盘文件中就会有很多的数据页,每一页数据里放了很多行数据。
    我们要更新一行数据,此时数据库会找到这行数据所在的数据页,然后从磁盘文件里把这行数据所在的数据页直接加载到
    Buffer Pool里,也就是说Buffer Pool中存放的是一个一个的数据页。(定位行数据所在数据页,将数据页从磁盘加载到 Buffer Pool
    10.png

    (3)磁盘上的数据页和Buffer Pool中的缓存页是如何对应起来的?
    默认情况下,磁盘中存放的数据页的大小是16KB,也就是说一页数据包含了16KB的内容。
    Buffer Pool中存放的一个一个的数据页,叫做缓存页,Buffer Pool是一个缓冲池,里面的数据都是从磁盘缓存到内存里的,所以Buffer Pool默认情况下,一个缓存页的大小和磁盘上的一个数据页的大小是一一对应的,都是16KB

    (4)缓存页存放的描述信息是什么? 缓存页描述信息,描述数据放缓冲池前面,各个缓存页放后面
    对于每个缓存页,它实际上都会有一个描述信息,这个描述关于缓存页所属的表空间,数据页的编号,这个缓存页在Buffer Pool中的地址等。(描述数据相当于缓存页的引用
    每个缓存页都会对应一个描述信息,这个描述信息也是一块数据,在Buffer Pool中,每个缓存页的描述数据放在最前面,然后各个缓存页放在后面。
    Buffer Pool中的描述数据大概占缓存页大小的5%左右,也就是800个字节。16KB*0.05,假设你设置的buffer pool大小是128MB,实际上Buffer Pool真正的最终大小会超出一些存放缓存页的描述数据。也就是130多MB。
    11.png

    问题:SQL语句里用的都是表和行的概念,但是我们提的都是表空间,数据页,他们之间有什么关系呢?
    答:一个是逻辑概念,一个是物理概念。表,列,行都是逻辑概念,我们只知道数据库里有一个表,表里有几个字段,有多少行,
    但是这些表里的数据在数据库的磁盘上是如何存储的?我们其实不关注这个的,这个是磁盘文件怎样存储的。
    表空间,数据页这些是物理上的概念,实际是在物理层面,表里的数据都存放在一个表空间中,表空间是由一堆磁盘上的数据文件组成的,这些数据文件存放了表里的数据,这些数据是由一个个的数据页组织起来的,是物理层面的概念,这些是他们之间的区别。