缓冲池
mysql使用 innodb作为存储引擎的表来说 数据都是以页的形式存储在表空间里 我们知道磁盘访问速度很慢,所以为了提高速度 当访问某个页上面的数据时 先将这个页加载到内存中 缓存起来就可以对数据进行读写操作了 下次再次访 就不需要再次去磁盘里找了 提高效率 这个内存就是buffer pool 缓存池
Buffer pool组成
这个是innodb整体结构
buffer pool中包含了 insert buffer , 索引和数据,锁信息等
buffer pool默认的缓存页和磁盘页大小一样 16k 为了更好的管理这些页 给每个页设置一个控制信息块 每个页对应一个控制块 这个控制块记录了 该页所属的 表空间号 页号,缓存页在bufferpool中的地址等信息 结构如下
free 链表
free链表 是记录那些 空闲的缓存页的 把空闲的缓存页对应的控制块作为一个节点 插入到free链表中 每当从磁盘中加到一个页到内存中的时候 就从这个链表中取出一个空闲缓存页 先将磁盘中的这个页的信息(表空间号 页号)写入到 这个空闲缓存页所对应的控制块中 然后将这个节点从链表中pop出,表示这个页已经被使用了