Buffer Pool架构
2021-08-17 14:57:22 22 举报
Buffer Pool架构
作者其他创作
大纲/内容
chunk
描述数据
每个描述数据中都有两个指针flush_pre和flush_next通过这两个指针将所有描述数据串成一个双向链表基础节点指向链表中的头尾节点,里面存放了flush链表中还有多少节点如果一个缓存页被修改了,那这页就会被加入到flush链表中,会有后台线程定时扫描flush链表,将脏页刷回磁盘,然后将这个缓存页从flush链表中移除
lru链表分为两部分:热区域和冷区域冷区域占比通过 innodb_old_blocks_pct 设置,默认是37当数据页加载到缓存页时,会加入到lru冷区域的头部,如果在 innodb_old_blocks_time(默认1000毫秒) 后访问了该缓存页,则会将其从冷区域移动到热区域头部。当访问热区域的后3/4区域的缓存页时,会将其移动到热区域的头部,访问前1/4区域的缓存页不会进行移动
数据页16KB
基础节点count(链表中节点数)
表空间号 + 数据页号 = 缓存页地址
描述数据:描述缓存页的。一个缓存页有一个描述数据,包含了所属表空间,数据页编号,缓存页在Buffer Pool中的地址等等。描述数据大小大概为缓存页的5%左右
描述数据热数据
描述数据冷数据
一行数据
一个Buffer Pool中有多个chunk,大小由 innodb_buffer_pool_chunk_size 控制,默认是128MB如果Buffer Pool大小不超过1G的话,最多只会分配一个Buffer Pool每个Buffer Pool中的多个chunk共用一套free、flush、lru链表
缓存页
每个描述数据中都有两个指针free_pre和free_next通过这两个指针将所有描述数据串成一个双向链表基础节点指向链表中的头尾节点,里面存放了free链表中还有多少节点
Free链表
lru链表
flush链表
磁盘文件
每读取一个数据页,就会将它的表空间+数据页号作为key存入数据页缓存表中,value则是缓存页地址
InnoDB引擎
Buffer Pool
包含很多数据页
加载数据页到Buffer Pool中
数据页缓存表
收藏
0 条评论
下一页