本文共 1481 字,大约阅读时间需要 4 分钟。
CR块请求流 ktrget: - 初始化CR扫描请求。 - 调用kcbgtcr获取最佳缓存区域构建CR缓冲区。 - 调用ktrgcm应用undo来构建CR缓冲区。 - 将CR缓冲区返回给请求者。 kcbgtcr: - 如果成功,返回“最佳”候选人(由ktrexf执行)。 - 扫描哈希桶,以获取可用于构建CR缓冲区的缓冲区。 - 如果不成功,请求调用kcbget。 kcbget: - 重新尝试kcbgtcr的扫描。 如果找到缓冲区,则立即返回。 如果没有,那么如果它正在读入或存在当前模式缓冲区,则等待它可用后,然后重新扫描缓冲区。 如果这些失败,则不能使用任何本地缓存的缓冲区。 如果上述操作失败: - CR服务重新分配管理CR请求。 CR块的请求最多涉及三个实例:请求者实例,锁定主实例和当前块所有者实例。 如果满足以下条件之一,则授予锁定:
资源保持模式为NULL。
资源保持模式为S,主节点中没有S锁的持有者。
如果锁主实例中存在过去镜像(PI),并且PI SCN比snap-scn大,则主节点是为该节点。
否则,您选择具有最小SCN的PI镜像且PI-SCN大于snap-SCN。此PI的所有者节点是系统将CR请求转发到的节点。用最小SCN的PI的原因是这样应用的UNDO较少。
如果根本没有PI,则选择当前块的所属实例。
Light Work Rule 为了避免因为块清除而产生消耗资源过多的CR块构建工作,将合适的缓冲区发送给请求者以完成CR构建。Oracle引入了LWR。CR请求节点的LMS进程通过调用kcbgtcr或ktrget以构建CR缓冲区。当LWR规则触发条件: - 请求物理I/O。 - 找到具有相同类,相同AFN和相同blockID单objectID的的缓冲区,一般是删除或truncate的对象。 - 写进行中。 Fairness Oracle为了在锁转换和cr块构造产生的开销之间选择最小消耗资源的方式,引入了fairness机制。当一个节点多次(_fairness_threshold)请求另一个节点具有独占锁的buffer的时候。另外一个节点会将buffer上的锁降级为scur然后把block传输到请求节点。之后这个节点再次访问该buffer的时候直接到本地buffer cache申请即可。 LMS(构建CR缓冲区)执行buffer锁的降级转换动作,如果: - 块不是UNDO,锁定保持在X模式 - 自上次对块进行更改以来,缓冲区的CR请求过多。 如果有超过_fairness_threshold次数的CR请求,LMS会执行此操作。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28218939/viewspace-2655704/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28218939/viewspace-2655704/