数据结构和流程 每个 frame包括: pin count, dirty a pin count:正在访问该 frame的事务的个数 a Dirty:已经被修改过的 Frame 请求处理的流程 找一个 pin cou为0的fame,pin_c×,则 口查看 Buffer poc0是否包含此页,如没有 如 dirty为true,则将其写入磁盘 将相应的页读入此 frame a将fame的地址返回 21
21 数据结构和流程 ◼ 每个frame包括:pin_count,dirty ❑ pin_count:正在访问该frame的事务的个数 ❑ Dirty:已经被修改过的Frame ◼ 请求处理的流程 ❑ 查看Buffer pool是否包含此页,如没有,则 ◼ 找一个pin_cout为0的frame,pin_cout++ ◼ 如dirty为true,则将其写入磁盘 ◼ 将相应的页读入此frame ❑ 将frame的地址返回
几点补充 Diry代表此 frame的数据已被修改,在 Dirty frame被替换之前需要同步到磁盘上 申请新的 frame时如没有可替换的 frame,则等 待 如何处理多个事务同时访问一个 frame中的数 据 22
22 几点补充 ◼ Dirty代表此frame的数据已被修改,在Dirty frame被替换之前需要同步到磁盘上 ◼ 申请新的frame时如没有可替换的frame,则等 待 ◼ 如何处理多个事务同时访问一个frame中的数 据?
缓冲区的替换策略 最早使用策略( Lest recently used,LRU) 上被替换,因为在此之前有可能再次被访3 口当 pin count=0时该 frame成为可选择,但并不 口最早变成可选择的页被首先替换 Clock策略 口将所有的 frame排成一个圈,下一个被替换的页是圈 上的下一个可选择的页 口使用 referenced标志避免刚被访问过的 frame被再次 访问,其想法是 referenced在第一遍访问时变成true 第二遍才替换 23
23 缓冲区的替换策略 ◼ 最早使用策略(Lest recently used,LRU) ❑ 当pin_count=0时该frame成为可选择,但并不是马 上被替换,因为在此之前有可能再次被访问 ❑ 最早变成可选择的页被首先替换 ◼ Clock策略 ❑ 将所有的frame排成一个圈,下一个被替换的页是圈 上的下一个可选择的页 ❑ 使用referenced标志避免刚被访问过的frame被再次 访问,其想法是referenced在第一遍访问时变成true, 第二遍才替换
缓冲区的替换策略 实际系统中的 Buffer pool aDB2:cock,允许有多个 Buffer pool a Sybase:LRU,允许有多个 Buffer pool a Informax, Oracle:LRU,单个 Buffer pool aSq| Server: clock,单个 Buffer pool 24
24 缓冲区的替换策略 ◼ 实际系统中的Buffer Pool ❑ DB2:clock,允许有多个Buffer Pool ❑ Sybase :LRU,允许有多个Buffer Pool ❑ Informax,Oracle: LRU,单个Buffer Pool ❑ Sql Server: clock,单个Buffer Pool
Buffer pool的预取 Buffer Pool virtual memory 口区别在于 Buffer pool能够发现页访问模式 页访问模式产生的原因在于,页的访问方式由 上层的查询代数和操作决定 ■页的预取 口DB2中的 Prefetching dirty frame的强制写盘 25
25 Buffer Pool的预取 ◼ Buffer Pool与virtual memory ❑ 区别在于Buffer Pool能够发现页访问模式 ◼ 页访问模式产生的原因在于,页的访问方式由 上层的查询代数和操作决定 ◼ 页的预取 ❑ DB2中的Prefetching ◼ dirty frame的强制写盘