什么是缓冲池?
缓冲池是主内存中的一个区域,用于缓存被访问的表和索引数据。缓冲池允许频繁使用的数据直接从内存中访问,从而加快处理速度。在专用服务器上,通常会将高达 80% 的物理内存分配给缓冲池。
为了提高大容量读取操作的效率,缓冲池被划分为页。为了提高缓存管理的效率,缓冲池被实现为一个页面的链表;很少使用的数据会通过一种最近最少使用(LRU)算法的变体从缓存中淘汰。
LRU 算法
当需要为缓冲池添加新页面腾出空间时,会将最近最少使用的页面逐出,并将新页面插入到列表的中间位置。这种中间插入策略将列表视为两个子列表:
- 在头部,有一个最近访问过的新的("年轻")页面的子列表
- 在尾部,有一个访问时间较早的旧页面子列表
该算法将经常使用的页面保留在新子列表中。这 旧子列表包含使用频率较低的页面;这些页面是可能被淘汰的对象。
默认情况下:
- 缓冲池的八分之三用于旧子列表。
- 列表的中间点(tailHead)是新子列表尾部与旧子列表头部相接的分界线。
- 上来把新加载进来的放在tailHead,也就是让你变成老的里面最新的,包括读和预加载的内容
- 访问已经加载进buffer pool的页面会挪到新子列表第一位(用户实际查询,而非预加载)
- 随着时间变长,未被访问的数据会像列表尾部移动,直至驱逐