温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么理解Oracle RAC分布式资源管理

发布时间:2021-11-09 10:20:06 来源:亿速云 阅读:222 作者:iii 栏目:关系型数据库

这篇文章主要介绍“怎么理解Oracle RAC分布式资源管理”,在日常操作中,相信很多人在怎么理解Oracle RAC分布式资源管理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解Oracle RAC分布式资源管理”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

因为集群的分布式架构,通过进程间的通信完成资源的共享、分发、同步对分布式锁管理实现就变得尤为必要。 有了这种通信的存在,在与集群中的其他实例上LMD进程完成通信锁定一个资源后,无论有多少DLM实例发生故障,都不会丢失有关锁资源的重要信息。但是需要注意的一点是数据库的崩溃恢复(能够恢复在中止实例的缓冲区高速缓存中丢失的块)不是DLM的功能,块的全局高速缓存处理仍然使用相同的“写入前刷日志”规则来确保持久化。通过前面系列文章我们知道GRD或DLM是由GES组件和GCS组建组成,而这些功能的进程(LMON、LMS、LMD等)实现我们也有了大致的了解。现在我们来更进一步的了解这些进程的函数实现和参数调整。

DLM存在于群集的每个实例中。

 - 协调不同实例之间的请求和对共享资源的访问。

 - 保存集群中所有锁的清单。

 - 资源可用时授予和通知进程。

 - 当其他进程请求锁时通知锁的所有者。

容错:DLM可以承受n-1个节点故障。 

死锁检测:DLM检测并报告死锁。

LMD进程:

LMD0是DLM的核心,LMD0处理所有锁定操作和资源创建,检测死锁以及向其他LMD0发送消息。LMD0的处理统计信息可以通过两个视图V$DLM_CONVERT_LOCAL和V$DLM_CONVERT_REMOTE查看。统计信息由初始化参数timed_statistics控制,在11g版本默认为TRUE。

假设当前在转换队列上等待的锁定符合授权队列,则LMD会使用move-scan-convert流程进行定期检查。

LMD0的主循环:kjmdm

• lock db锁定:

 - 停止任何死锁检测:kjdddei

 - 锁定并重置:kjfzfcl

在锁定状态下,无法从DLM获取任何锁定或创建任何新资源。在重构期间锁定整个GRD,以便可以快速从节点故障中恢复。

• lock db解锁:

 - 检测锁转换:kjcvscn。

 - 死锁检测:kjddits / kjddscn。 

 - 清理恢复域:kjprsem。

 - 更新统计信息:kjxstc。

 - 发送流控制消息:kjctssb。

LMON进程:

由前面系列文章我们知道LMON进程主要负责整个数据库集群层面的一致性关系(CGS),监控整个集群的全局队列和资源。根据前面DLM缓存资源和锁定结构的介绍。当集群存在不再需要的资源时就会将他放置在一个空闲列表上。然后LMON调用kjrchc清除资源的DLM缓存。

LMON进程的使用的主要函数如下:

 - LMON的主循环:kjfcln

 - 侦听本地消息:kjcswmg

 - 响应重构事件:kjfcrfg

 - 清除GES缓存:kjrchc

LMS进程:

LMS是整个Cache Fusion体系最活跃和最忙碌的进程。它负责维护GRD中的数据块资源信息。

LMS进程数由_lm_lms确定默认值为max(#CPU/ 4,2)

1.扫描具有可授予转换锁的PCM资源。

2.处理降级转换队列由kclpbi处理。

3.如果消息正在排队并且超过_side_channel_batch_timeout参数设置的时间,则flush消息。

4.处理PCM锁的远程消息。

GES资源和锁

GES资源即non-PCM资源的初始分配数量可以通过查询隐含参数_lm_ress。如果用尽,则可以在shared_pool中申请分配更多资源。ges资源的初始分配,使用和限制信息可以通过v$resource_limit的ges_ress值获得(SELECT * FROM V$RESOURCE_LIMITWHERE RESOURCE_NAME LIKE 'ges%' ;)

默认情况下_lm_ress=1.1 * ( localres +(number_of_instance-1) * localres / number_of_instance )

localres = processes + dlm_locks + transactions+ enqueue_resources+ db_files+7+

parallel_max_servers *cluster_database_instance+ parallel_max_servers + cluster_database_instance+200

GES资源锁初始分配数量可以通过查询隐含参数_lm_locks。同样的如果用尽,则可以在shared_pool中申请分配更多锁资源。ges锁的初始分配,使用和限制信息可以通过v$resource_limit的ges_locks值获得(SELECT * FROM V$RESOURCE_LIMIT WHERE RESOURCE_NAME LIKE 'ges%' ;)

默认情况下_lm_locks=(localres+_enqueue_locks)+ (number_of_instance-1 * (localres+_enqueue_locks) / number_of_instance)

localres = processes + dlm_locks +transactions + enqueue_resources + db_files + 7 +

parallel_max_servers *cluster_database_instance+ parallel_max_servers + cluster_database_instance+200

GCS资源和锁

GCS资源即PCM资源的初始分配数量可以由隐含参数_gcs_resources 配置或默认max(1.1 * _db_block_buffers,2500)。如果耗尽,则从shared_pool分配的更多资源以1024为增量单位。gcs资源的初始分配,使用和限制信息可以通过v$resource_limit的gcs_resources值获得(SELECT * FROMV$RESOURCE_LIMIT WHERE RESOURCE_NAME LIKE 'gcs%' ;)

GCS资源锁即PCM资源锁的初始分配数量可以由隐含参数_pcm_shadow_locks配置或则默认max(1.1 * _db_block_buffers,2500)。如果耗尽,则从shared_pool分配的更多资源以1024为增量单位。gcs资源的初始分配使用和限制信息可以通过v$resource_limit的gcs_shadows值获得(SELECT * FROMV$RESOURCE_LIMIT WHERE RESOURCE_NAME LIKE 'gcs%' ;)

DLM进程

DLM进程数量初始分配数量可以通过设置隐含参数_lm_procs或max( ( 64 + 256 ) + ( number_of_instance-1 ), processes )如果耗尽,则从shared_pool分配更多资源。DLM进程的初始分配,使用和限制信息可以通过v$resource_limit的ges_locks值获得(SELECT * FROM V$RESOURCE_LIMIT WHERE RESOURCE_NAME LIKE 'ges%' ;)

到此,关于“怎么理解Oracle RAC分布式资源管理”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI