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

86次阅读
没有评论

共计 3102 个字符,预计需要花费 8 分钟才能阅读完成。

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

因为集群的分布式架构, 通过进程间的通信完成资源的共享、分发、同步对分布式锁管理实现就变得尤为必要。  有了这种通信的存在,在与集群中的其他实例上 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 分布式资源管理”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-24发表,共计3102字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)