这篇文章主要介绍“怎么理解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分布式资源管理”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!