逻辑存储结构
表空间(ibd文件): 一个mysql实例可以对应多个表空间,用于存储记录、索引等数据。
段: 分为数据段(leaf node segment)、索引段(non-leaf node segment)、回滚段(rollback segment)、InnoDB是索引组织表,数据段就是B+树的叶子节点,索引段即为B+树的非叶子节点。段用来管理多个Extent(区)
区: 表空间的单元结构,每个区的大小为1M。默认情况下,InnoDB存储引擎页大小为16KB,即一个区中一共有64个连续的页
页: 是InnoDB存储引擎磁盘管理的最小单元,每个页的大小默认为16KB。为了保证页的连续性,InnoDB存储引擎每次从磁盘申请4-5个区。
行: InnoDB存储引擎数据是按行进行存放的。
Trx_id: 每次对某条记录进行改动时,都会把对应的事务id赋值给trx_id隐藏列。
Roll_pointer: 每次对某条记录进行改动时,都会把旧的版本写入到undo日志中,然后这个隐藏列就相当于一个指针,可以通过它来找到该记录修改前的信息。
空间大小排序:表>段>区>页>行
架构
MySQL5.5版本开始,默认使用InnoDB存储引擎,擅长事务处理,具有崩溃恢复特性,在日常开发中使用非常广泛。
内存结构:
1.Buffer Pool:缓冲池是主内存中的一个区域,里面可以缓存磁盘上经常操作的真实数据,在执行增删改查操作时,先操作缓冲池中的数据(若缓冲池没有数据,则从磁盘加载并缓存),然后再以一定频率刷新到磁盘,从而减少磁盘IO,加快处理速度。
以页为单位,底层采用链表数据结构管理Page。
free page:空闲page,未被使用
clean page:被使用的page,数据没有被修改过
dirty page:脏页,被使用page,数据被修改过,页中数据与磁盘的数据产生了不一致。
2.Change Buffer:更改缓冲区(针对于非唯一二级索引页),在执行DML语句时,如果这些数据Page