ITPub博客

首页 > 数据库 > Oracle > Oracle RAC CacheFusion 系列十五:Oracle RAC CRServer Part Two

Oracle RAC CacheFusion 系列十五:Oracle RAC CRServer Part Two

原创 Oracle 作者:沃趣科技 时间:2019-10-14 09:40:30 0 删除 编辑

一致性读请求  

ktrget请求调用流程,调用kcbgtcr获取最佳缓存区域用以构建CR缓冲区,然后调用ktrgcm应用undo构建可用的CR缓存。kcbgtcr计算扫描hash桶,调用ktrexf查找最佳缓存区。如果在缓存区域在本地则结束,如果不在本地则调用kcbzib获得缓存区域。kcbzib请求调用kcbzgb获得一个buffer并且设置buffer的状态为Reading。

ktrgcm统计信息递增条件:

如果应用UNDO并且CLEANOUT,则“cleanouts and rollbacks - consistent read”计数增加。

如果应用UNDO但是没有执行CLEANOUT,则“rollbacks -consistent read”计数增加。

如果没有应用UNDO但执行CLEANOUT,则“cleanouts- consistentread”计数增加。

如果没有应用UNDO并且也没有执行CLEANOUT,则“no work - consistentread”计数增加。

注:这里的cleanout指的是Oracle延迟块清除。



注:如果LE转换期间发生超时,则设置KCBBHFCR标志位。如果DLM转换成功,则LE模式> =请求模式。 

Oracle根据LE持有模式与CR请求模式的兼容性关系决定调用kclcls是否需要打开LE(第一次使用)或进行转换LE,即lock open,lock convert。

Oracle通过acquiring !=0或者releasing !=0来判断LE是否处于事务中。


在kclscrs流程中,它根据三个判断来确定接下来执行的请求动作(lock open,lock convert,predecessor read)。

从下面流程图中我们知道只有当buffer上存在全局的锁,锁元素为open状态并且缓存中没有任何PI,那么这个时候系统就会调用kjbpredread进行predecessor read(LWR)进行当前块的请求动作记录等待事件“global cache current blocks xxxx”。lock open,lock convert均为一致性块构造的过程所以记录的等待为“global cache CRblocks xxxx”。


  请求消息传递  

1.前台进程申请LE。

2.设置LE请求标识0x2。

3.前台进程向master节点的lms进程提交请求信息。

4.前台进程开始等待“global cache CR request”。

5.master节点的LMS进程通知请求节点LMS进程已完成锁授权。

6.LMS申请取消标识0x2。

7.本地LMS进程通知前台进程,前台进程结束等待。

  请求块传递  

1.前台进程申请LE。

2.设置LE请求标识0x2。

3.前台进程向master节点的lms进程提交请求信息。

4.前台进程开始等待“global cache CR request”。

5.master节点LMS申请请求创建CR块。

6.master节点LMS进程直接将CR块传递给请求实例的前台进程。


如果轻量级工作规则LWR在CR块正在构建时触发,则X$KCLCRST.LIGHTn会递增,触发条件:

找到具有相同AFN和BLOCKNUM的缓冲区,但缓冲区中的object-id与请求者提交的object-id不同(在一致读取<is>开始之后和结束之前,对象被truncate或drop)。

等待WRITE COMPLETE。

等缓冲区处于READING状态。

请求空闲缓冲区。

等待“free buffer wait”。

从磁盘到缓冲区缓存的读取块。

等待REDO空间。

等待ITL。

如果找到具有“modification starte”位的块,则X$KCLCRST.LIGHT1递增; 如果缓冲区处于实例RECOVERY状态,则X$KCLCRST.LIGHT2递增。

  kclgcr  

将CR缓冲区发送给请求者后,将更新以下统计信息:

“global cache cr block build time”,记录在ktrget或kcbgtcr中花费时间。

“global cache cr block log flush time”,记录在LOG FLUSH阶段花费时间。

“global cache cr block send time”,记录CR块发送花费的时间。

注意:每次缓冲区修改时都会重置LE.FAIRNESS_COUNTER。


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

请登录后发表评论 登录
全部评论
杭州沃趣科技股份有限公司创建于2012年(股票代码:839849),是一家专注为企业用户提供基于高性能、高可用、可扩展的开放数据库云平台解决方案的国产厂商。公司创始团队为原阿里巴巴数据库技术团队核心骨干,凭借丰富的研发及运维经验,为行业客户提供数据库云产品及软硬件一体化解决方案。

注册时间:2016-07-18

  • 博文量
    267
  • 访问量
    735149