CMU-cs445:buffer pool

buffer pool manager

- buffer池组成
    - frame:缓冲池由frame组成,每次我们需要一个page,就吧这个page替换进frame
    - page table:用来记录page到buffer pool的映射关系
    - 其他元信息:脏页面(页面是否被修改),引用计数(页面被线程正在访问的计数)
- multiple buffer pools(多个缓冲池,每个池有其策略)
    - 减少线程竞争
    - 提供多种策略
    - 如何实现?根据Object id映射或者哈希
- pre-fetching(预取)
    - 提前把一些顺序信息读入buffer pool中  
    - 可以完成一些操作系统不能完成的预读,如index分支跳转
- scan sharing(扫描共享)
    - 查询复用计算结果
    - 允许多个查询附加到一个游标上
- buffer pool bypass
    - 给查询线程分配一小块内存,查询page的时候不经过缓存池,为了不污染缓存
    - 查询量小的时候使用
- O_DIRECT
    - 避免操作系统文件缓存

replacement policies

- LRU
- Clock(LRU近似算法)
- LRU-K:为了避免遍历对LRU的影响,K次才不会替换

脏页面

- 页面有一个标识位,记录某次查询是否更改页面记录
- 后台写入(background writing):定时将脏页面写回,避免缓存池中大量脏页面