Oracle RAC Cache Fusion 系列十四:Oracle RAC CR Server Part One

Oracle数据库环境中隔离级别为read committed,每个事务都只能看到其他事务已提交的更改和自己未提交的更改。所有关于CR块的统计都可以通过x$bh视图查看。read-commited隔离级别下的有两种可能性:
  • 语句级别:查询结果与查询的开始一致(snap_scn =当前SCN)。
  • 事务 级别:查询结果与事务开始时一致(snap_scn =事务开始时的当前SCN)。

Oracle RAC Cache Fusion 系列十四:Oracle RAC CR Server Part One_第1张图片

CR块请求流
ktrget: - 初始化CR扫描请求。 - 调用kcbgtcr获取最佳缓存区域构建CR缓冲区。 - 调用ktrgcm应用undo来构建CR缓冲区。 -  将CR缓冲区返回给请求者。 kcbgtcr: - 如果成功,返回“最佳”候选人(由ktrexf执行)。 - 扫描哈希桶,以获取可用于构建CR缓冲区的缓冲区。 - 如果不成功,请求调用kcbget。 kcbget: - 重新尝试kcbgtcr的扫描。 如果找到缓冲区,则立即返回。 如果没有,那么如果它正在读入或存在当前模式缓冲区,则等待它可用后,然后重新扫描缓冲区。 如果这些失败,则不能使用任何本地缓存的缓冲区。 如果上述操作失败: - CR服务重新分配管理CR请求。 CR块的请求最多涉及三个实例:请求者实例,锁定主实例和当前块所有者实例。
如果满足以下条件之一,则授予锁定:

  • 资源保持模式为NULL。

  •  资源保持模式为S,主节点中没有S锁的持有者。

否则,主设备将CR请求转发给持有者节点。 如果锁是全局的,那么Oracle将选择一个节点来转发CR请求,如下所示:

  • 如果锁主实例中存在过去镜像(PI),并且PI SCN比snap-scn大,则主节点是为该节点。

  • 否则,您选择具有最小SCN的PI镜像且PI-SCN大于snap-SCN。此PI的所有者节点是系统将CR请求转发到的节点。用最小SCN的PI的原因是这样应用的UNDO较少。

  • 如果根本没有PI,则选择当前块的所属实例。

Oracle RAC Cache Fusion 系列十四:Oracle RAC CR Server Part One_第2张图片


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会执行此操作。

Oracle RAC Cache Fusion 系列十四:Oracle RAC CR Server Part One_第3张图片


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28218939/viewspace-2655704/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28218939/viewspace-2655704/

你可能感兴趣的:(Oracle RAC Cache Fusion 系列十四:Oracle RAC CR Server Part One)