InnoDB Buffer Pool巧配置全解

本文详细介绍了MySQL InnoDB Buffer Pool的工作原理、参数配置及其对性能的影响。通过理解LRU算法在Buffer Pool中的应用,以及如何调整相关参数如innodb_buffer_pool_size、innodb_buffer_pool_instances等,可以显著提升数据库性能。文中还探讨了预读机制、脏页刷新策略以及如何在服务器重启后快速恢复Buffer Pool状态,旨在帮助读者更好地理解和优化InnoDB Buffer Pool。
摘要由CSDN通过智能技术生成

作者:M哥

知数堂MySQL第8期学员、知数堂藏经阁项目-星耀队队长

一、简介

InnoDB维护了一个缓存数据和索引信息到内存的存储区叫做Buffer Pool,它会将最近访问的数据缓存到缓冲区。我们通过配置各个Buffer Pool的参数,可以显著提高MySQL的性能。 

InnoDB的Buffer Pool是基于LRU算法来实现的,下面我们可以简单了解一下LRU算法:

least recently used (LRU),InnoDB管理Buffer Pool是将Buffer Pool作为一个list管理,基于LRU算法的管理。当有新的页信息要读入到Buffer Pool里面的时候,Buffer Pool就将最近最少使用的页信息从Buffer Pool当中驱逐出去,并且将新页加入到list的中间位置,这就是所谓的中点插入策略

一般情况下list 头部存放的是热数据,就是所谓的young page(最近经常访问的数据),list尾部存放的就是old page(最近不被访问的数据)。这个算法就保证了最近经常使用的page信息会被保存在最近访问的sublist,相反的不被经常访问的就会保存在old sublist。而old sublist当中的page信息都是在新数据写入时被驱逐的。


 LRU算法有以下的标准算法

  • 3/8的list信息是作为old list,这些信息是被驱逐的对象。

  • list的中点就是我们所谓的old list头部和new list尾部的连接点,相当于一个界限

  • 新数据的读入首先会插入到old list的头部,

  • 如果是old list的数据被访问到了,这个页信息就会变成new list,变成young page,就会将数据页信息移动到new sublist的头部。

  • 在数据库的Buffer Pool里面,不管是new sublist还是old sublist的数据如果不会被访问到,最后都会被移动到list的尾部作为牺牲者。


一般情况下,页信息会被查询语句立马查询到而被移动到new sublist,这就意味着他们会在Buffer Pool里面保留很长一段时间。

表扫描(包括mysqldump或者没有where条件的select等操作)等操作将会刷入大量的数据进入Buffer Pool,同时也会将更多的Buffer Pool当中的信息刷出去,即使这个操作可能只会使用到一次而已。同样的如果 read-ahead后台进程读入大量数据的情况下也是会造成Buffer Pool大量高频的刷新数据页,但是这些操作是可控的,下面会讲到。read-ahead操作简单说一下就是MySQL的一个后台预读进程,能够保证MySQL预读入数据进入Buffer Pool当中。

二、参数一览表

下面先看下InnoDB Buffer Pool的一些相关参数信息,后面会详细解释一下:

1、innodb_buffer_pool_size:这个值是设置InnoDB Buffer Pool的总大小;

2、innodb_buffer_pool_chunk_size:InnoDB Buffer Pool的执行单元 chunk size的大小。这里面有个关系要确定一下,最好按照这个设置 innodb_buffer_pool_size=innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances*N(N>=1);

3、innodb_buffer_pool_instances:设置InnoDB Buffer Pool实例的个数,每一个实例都有自己独立的list管理Buffer Pool

4、innodb_old_blocks_pct:默认InnoDB

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值