读书内容:技术内幕第二章
1.内存与磁盘
基本流程图如下:
-
在数据库中进行读取页的操作时,首先将磁盘读取到的页放入缓冲池中,这个过程称之为FIX页到缓冲池,下次再读取到相同的页时,先判断是否在缓冲池中,如果在则直接从缓冲池读取,如果不在则循环FIX的过程
-
在数据库中进行修改页的操作时,首先修改缓冲池中的页,然后再以一定的频率刷新到磁盘(checkpoint的刷新机制)
2.LRU列表
lru列表用来管理bf已读取到的页
-
读取到的新页,放入到LRU列表的midpoint位置,处于lru列表的5/8处,而不是直接放入头部,midpoint之前称之为new列表,即热数据区,之后称之为old列表,即是非热数据区
-

-
-
为什么不直接放入LRU列表的头部呢?
-
如果直接放入头部,某些sql如:(select * from 大表 )可能会使一些热数据刷出lru列表,下次读的时候又要从磁盘刷新到缓冲池!从而影响缓冲池的效率!为了解决这个问题,引入另一个参数innodb_old_blocks_time来管理LRu列表,
-
这个参数表示,页读取到midpoint位置之后还需要等待多久才会被加入到LRU列表的热端!
3.Free列表
Free列表管理bf未操作过的页
-
数据库刚启动时,LRU列表是空的,这时页都是存放在free列表中的,当需要读取新的页时,首先从free列表查找是否有可用的空闲页,有就从free列表删除,迁移至LRu列表。如果free列表没有可用的空闲页,则根据LRU算法,淘汰列表末尾的页,将内存分配给新的页。
-
old页加入到new页我们就称之为page made young
-
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29096438/viewspace-2135018/
,如需转载,请注明出处,否则将追究法律责任。