——缓冲池

InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理,因此可将其视为基于磁盘的数据库系统。在数据库系统中,由于CPU速度与磁盘速度的鸿沟,基于磁盘的数据库系统通常需要缓冲池技术提高整体性能

缓冲池简单而言是一块内存区域,通过内存的速度来弥补磁盘速度较慢对数据库性能的影响。

在数据库中进行读取页的操作,首先将从磁盘读到的页存放在缓冲池中,下一次读取到相同的页时,首先判断该页是否在缓冲池中,若在则命中,直接返回,否则需要从磁盘读取。

对于数据库中页的修改操作,首先修改缓冲池中的页,然后在以一定频率刷新到磁盘上。页从缓冲池刷新到磁盘并不是在页发生更新时触发,而是通过一种checkpoint机制刷新回磁盘,这样做目的提高性能

InnoDB 体系架构-内存

查看InnoDB缓冲池大小

缓冲池缓存的数据页类型:索引页、数据页、undo页、插入缓冲、InnoDB存储的锁信息、数据字典等。

InnoDB 体系架构-内存

 

从高版本InnoDB开始,允许有多个缓冲池实例。每个页根据hash值分配到不同的缓冲池中,增加了数据库并发处理能力

 

——LRU List , Free List  ,  Flush List

通常而言,数据库中的缓冲池通过LRU算法(最近最少使用)算法进行管理。即最频繁使用的页在LRU列表的前端,而最少使用的页在LRU列表的末尾。当缓冲池不能存放新读取的页时,首先释放LRU列表末尾的页

在InnoDB存储引擎中,缓冲池页的大小默认是16KB,同样使用LRU算法对缓冲池进行管理。但InnoDB还增加了midpoint位置,新读取到的页不是立即放入LRU列表首端,而是放入LRU列表的midpoint位置。默认是位于LRU列表的5/8位置

通常将midpoint之后的表称为old列表,而之前的列表称为new列表,即new列表中的页都是最为活跃的数据

为什么不采用朴素的LRU算法的原因是,某些SQL操作可能会使缓冲池中的页被刷新出,从而影响缓冲池的效率1.如常见的扫描操作。这些操作需要访问表中的许多页,但通常只是简单的查询,并不是严格意义的热点数据

LRU列表用来管理已经读取的页,但数据库刚启动时,LRU列表为空,即没有任何的页。这时页放置在Free列表中。当需要缓冲池分页时,首先从Free列表中查找是否有空闲页,若有则将该页从Free列表中删除,放入LRU列表中。否则,根据LRU算法,淘汰LRU列表末尾的页。

 

 

相关文章:

  • 2022-01-08
  • 2021-06-29
  • 2021-06-23
  • 2021-05-19
  • 2022-03-01
  • 2021-04-03
  • 2022-01-15
  • 2021-12-30
猜你喜欢
  • 2021-06-04
  • 2022-01-13
  • 2021-12-08
  • 2018-03-08
  • 2021-05-29
相关资源
相似解决方案