MySQL实战之BufferPoll详解
前言
- 使用MySQL如果没听过BufferPoll, 就好比写Java不知道Spring一样,人家会觉得你很low,大家都明白的,只要提到高效,肯定第一想到的就是内存,MySQL的核心内存就是它
BufferPoll详解
- MySQL启动时是什么样的了,来张图示意一下,首先MySQL操作的基本单元是缓存页,它是和数据页对应的,每个的大小都是16K,MetaData记录它们之间的对应关系。
- 刚开始是没问题的, 但是用着用着就不知道哪些在用,哪些空闲了,这个时候free链表就应运而生了,它的数据结构是双向链表,存在于metaData中, 其中有一个基础节点包含一空闲缓存页的数量和指向头尾节点的地址引用。
- 这时候有一些缓存页执行了增删改操作,后续肯定要进行刷盘操作啊,flush链表就是专门做这件事的,它和free链表类似也是一个双向链表的结构
- 还有一个比较重要的数据结构,称之为lru链表,它里边区分出了冷热数据,首先数据都是在冷数据区的,1秒以后再次访问,就会移动到热数据区。这个时候需要把脏数据刷盘就有目标了,肯定从冷数据区的末尾开始啦。
- 彩蛋
- 既然BufferPoll对于效率的影响这么大,而系统默认的内存是128M,是不是要优化一下,比如每个设置为2G, 再比如说设置4个,这样并发效率是不是大大提升