酷酷娱乐网

站内广告

Oracle RAC Cache Fusion 系列九:Oracle RAC 分布式资源管理(二)

时间:2020-09-15 05:00:02   作者:酷酷娱乐网   来源:www.kukuyl.com  
内容摘要:


因为集群的分布式架构,通过进程间的通信完成资源的共享、分发、同步对分布式......

因为集群的分布式架构,通过进程间的通信完成资源的共享、分发、同步对分布式锁管理实现就变得尤为必要。 有了这种通信的存在,在与集群中的其他实例上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%' ;)


本文章url:https://www.kukuyl.com/new/30000570.html

相关文章

CopyRight 2018 - 2020 http://www.kukuyl.com 酷酷娱乐网 All Rights Reserved .