所有的数据都被逻辑的放在一个空间中,称为tablespace
由上图可以看出,tablespace由segment组成,segment由extend组成,extend由page组成,page由row组成 在MySQL中默认会有一个共享表空间ibdata1,如果设置了innodb_file_per_table=on时,每张表内的数据放在各自的tablespace中,私有tablespace仅包括数据,索引,插入缓冲Bitmap页,而其他的例如回滚信息,插入缓冲索引页,系统事务信息,二次写缓冲等都还是放在共享表空间
数据页的结构: File Header(文件头)–>38byte Page Header(页头)–>56byte Infimun+Supremum Records User Records(用户记录,即行记录) Free Space(空闲空间) Page Directory(页目录) File Trailer(文件结尾信息)–>8byte
InnoDB是基于磁盘储存的,并将其记录按照页的方式管理,因此可将其视为基于磁盘的数据库系统。由于cpu的数据和磁盘速度之间的鸿沟,因此需要缓冲池技术来提高数据库的整体性能
缓冲池技术简单来说就是一块内存区域,通过内存的速度来弥补磁盘速度较慢对于数据库性能的影响。在数据库中进行页的操作,首先将磁盘读到的页放在缓冲池中,这个过程称为将页‘FIX’到缓冲池中,下一次再读取相同的页时,先判断是否在缓冲池中,若存在,则称该页在缓冲池中被命中,直接从缓冲池中读取,若不存在,则从磁盘中读取。
缓冲池通常是通过LRU算法进行管理,同时还加入midpoint位置,新读取的页,将不会放到链表头端,而是放到midpoint的位置,默认配置下,该位置位于5/8处
参考: