暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

沃趣技术 2019-07-31
477

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


相关链接

MySQL 一个让你怀疑人生的hang死现象

访问权限控制系统|全方位认识 mysql 系统库

权限系统表 | 全方位认识 mysql 系统库(一)

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

Oracle RAC Cache Fusion 系列七:RAC Messaging System

MySQL乱码之客户端字符集

MySQL8.0新特性之降序索引

深入浅出Kubernetes网络:跨节点网络通信之Flannel

Oracle RushQL勒索病毒恢复方法

如何清除创建失败的索引

MySQL分区如何迁移

谈谈代码——如何避免写出糟糕if...else语句

为何Binlog中同一个事务的event时间点会乱序?

Oracle中的并行系列(二):你设置的并行真的生效了吗?

Oracle集群技术 | 集群的自启动系列(一)



更多干货,欢迎来撩~


文章转载自沃趣技术,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论