Buffer Pool总览
2021-03-16 00:17:26 0 举报
Buffer Pool学习
作者其他创作
大纲/内容
chunk
数据页
描述数据
磁盘
生产环境经验:1、增大Buffer Pool内存,配置多个Buffer Pool,8G内存4个pool2、采用了chunk的目的,为了可以动态调整pool的大小,增加了内存后,只要分配给相应的chunk即可3、Buffer Pool一般设置为机器的50%到60%,buffer pool的大小=(chunk大小*pool数量)的整数倍4、SHOW ENGINEINNODB STATUS
占比37%
Buffer Pool(默认128M,可调整)
缓存页16k
Buffer Pool
热描述数据
基础节点 存放了链表头和尾
Free链表:空闲缓存页的描述数据组成的双向链表脏页:缓存页数据改了,磁盘还没改Flush链表:存放脏页的缓存页描述数据双向链表LRU链表:常用缓存页和冷门缓存页组成的链表Mysql预读:读取相邻缓存页的数据,主要是为了提升性能,但是现实中容易出现读了也没啥用的情况 SELECT * FROM TABLE,容易占满缓存页
Mysql
数据页缓存HASH表数据页编号+表空间:缓存地址数据页编号+表空间:缓存地址数据页编号+表空间:缓存地址
描述数据自身组成了一个链表
Flush链表
冷描述数据
Buffer Pool详情:
Free链表
1、查询数据到内存分片。第一个坑,会查询相邻的压根没用到的数据分片2、内存分片的详细信息存在另外一个里面3、当内存分片不够用了,用LRU算法开始淘汰旧的信息4、LRU就是个双向链表,数据被查询的多,就往前挪,每次满了就从最后一个元素开始删除内存分片数据,注意,这里不是删除,是把数据落到磁盘里5、新查询的数据首先放到到冷链表头部,1S(通过innodb_old_blocks_time配置)后再次访问,移动到热链头部,因为正常查询1S内很快就访问了,再次访问说明经常用到6、热链也做了优化,后3/4的数据被访问的时候才挪动数据,主要是为了减少链表的频繁移动
里面是一行一行数据
收藏
收藏
0 条评论
下一页