前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >平衡磁盘与CPU-InnoDb的buffer pool

平衡磁盘与CPU-InnoDb的buffer pool

作者头像
热心的大肚皮
发布2023-02-28 14:00:01
2530
发布2023-02-28 14:00:01
举报
文章被收录于专栏:程序猿日常笔记

大家好,我是热心的大肚皮,皮哥。新年快乐开工大吉。

Buffer Pool

啥是Buffer Pool?

mysql中的数据都在磁盘里,为了提高查询的性能,在mysql服务启动的时候向操作系统申请了一片连续的内存,也是是今天说的buffer pool,默认情况下是128MB

Buffer Pool什么结构?

  • 缓冲页:buffer pool对应的内存被划为分多个页面,也InnoDB表空间使用的一致,都是16KB。
  • 控制块:每一个缓冲页都有个对应的控制块,包含缓冲页的表空间编号,页号,地址及链表节点信息等。每个控制块对应的所占内存大小相同。
  • 碎片:当剩余空间不够一对控制块和缓冲页的大小时,这样的空间称为碎片。

为了方便管理,在Buffer Pool中,划分了free链表与flush链表。

  • free链表:刚开始启动mysql时,申请完Buffer pool内存空间后,此时会所有空闲的缓冲页对应的控制块作为一个节点放到一个链表中。如下图,其中基节点是单独申请的内存空间。每次使用时从链表中移除一个控制块及对应的缓存页。
  • flush链表:结构与free一样,当我们修改了Buffer Pool中某个缓冲页的数据后,它与磁盘上的数据不一致,这样的页就是脏页,正常来说为了数据一致性,应该马上刷新,但是这样特别影响性能,所以采用固定节奏来刷新,那么如果标记为脏页,这就是flush链表的含义。

Buffer Pool怎么使用呢?

如何在Buffer Pool中定位页数据?

我们怎么去查询某个页的数据呢?如果是采用链表查询,那性能慢死了,如果提高性能,肯定是hash呀,其实可以想下,我们定位的话也是根据表空间号和页号来定位一个页的,也就是表空间号和页号是key,对应的缓冲页地址也就是value,如果有则直接查询,否则从磁盘中加载数据到Buffer Pool中。

如何利用Buffer Pool的提高检索性能?

如何利用Buffer Pool的提高检索性能?其实答案很简单,减少磁盘IO,提升缓存命中率。

首先我们独自思考下,是不是用简单的LRU链表就可以。

  • 如果该页不在Buffer Pool中,则在把数据加载到Buffer Pool的缓冲页时,把对应的控制块放到LRU链表头部。
  • 如果在Buffer Pool中,则把对应的控制块移到链表头部。

第一步LRU的链表思路没有问题,但是有两个尴尬的场景。

场景一是InnoDB人性化的提供了预读的服务。

  • 线性预读: 如果顺序访问某个区的页面超过了innodb_read_ahead_threshold这个值,则会触发一次异步读取下个区的全部页面到Buffer Pool的请求,默认值是56。
  • 随机预读:如果某个区的13个连续的页面都被加载到了Buffer Pool中,无论是不是顺序读取的,都会触发一次异步读取本区全部其他页面的请求。

场景二是全表扫描。

为了解决两个问题,作者则是将这个LRU链表按照一定比例分成两截。默认是3/8。

  • young区域:使用频率非常高的缓冲页。即热数据。
  • old区域:使用频率不高缓冲页。也是冷数据。

预读与全表扫描的数据都只会放到冷数据的头部。针对热数据区,进行了进一步的优化,如果每次访问时,都移动节点,开销过大,为了解决这个问题,只有被访问的缓冲页在热数据的1/4的后面时,才会移动到LRU的链表头部。

这就是我们查询mysql时,Buffer Pool的运行过程,当然mysql也可以创建多个Buffer Pool实例,这个大家感兴趣可以看看官网。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序猿日常笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档