您好,欢迎访问一九零五行业门户网

RAC后台进程介绍

在rac数据库上会比单实例数据库多一些进程,这些进程是rac特有的,为了实现集群数据库功能而设置的。这篇文章会对rac特有的进程做一些介绍。 1、lmsn: global cache service process。 lmsn进程会维护在global resource directory (grd)中的数据文件以及每个c
在rac数据库上会比单实例数据库多一些进程,这些进程是rac特有的,为了实现集群数据库功能而设置的。这篇文章会对rac特有的进程做一些介绍。1、lmsn: global cache service process。
lmsn进程会维护在global resource directory (grd)中的数据文件以及每个cached block的状态。lmsn用于在rac的实例间进行message以及数据块的传输,这个对应的服务也就是gcs(global cache service),lms是cache fusion的一个重要部分。lms进程可以说是rac上最活跃的后台进程,会消耗较多的cpu.一般每个实例会有多个lms进程,每个oracle版本的默认的lms进程数目会有所不同,大部分版本的默认值是:min(cpu_count/2, 2))
2、lmd: global enqueue service daemon。(对应的服务叫ges服务)
lmd 进程主要处理从远程节点发出的资源请求,在多个实例之间协调对数据块的访问顺序,保证数据的一致性访问,大概过程如下:
+ 一个连接发出了global enqueue 请求
+ 这个请求会被发给本节点的lmd0进程
+ 这个前台进程会处于等待状态
+ lmd0会找到这个资源的master节点是谁
+ lmd0会把这个请求发送给master节点
+ 如果需要的话,master节点会增加一个新的master资源
+ 这时从master节点可以获知谁是owner, waiter
+ 当这个资源被grant给requestor后, master节点的lmd0进程会告知requestor节点的lmd0
+ 然后requestor节点的lmd0会通知申请资源的前台进程gcs服务与ges服务还有grd共同构成了rac的cache fusion(缓存融合)
缓存融合是rac内部最复杂的一部分,其中数据块是如何通过private network在实例之间传递,如何控制访问顺序,这些都很复杂,有兴趣的同学可以研究
如上总结lmd主要处理global enqueue 的请求, 而lck0主要处理本实例的lock.
另外,rac上的global deadlock 也是由lmd来发现的。3、lck0: instance enqueue process。
lck0进程主要处理非cache fustion的资源请求,比如library 和row cache 请求。
lck0处理在实例一级的锁:
row cache entries
library cache entries
result cache entries
这些实例级的锁的owner, waiter是lck0进程。
只要这个实例的锁的owner是lck0,那么这个实例的任何一个连接都可以使用这种cached的metedata.
如果本地的实例没有拥有这个lock,那么需要申请这个lock,前台进程会等待dfs lock handle。
另外,当shared pool出现压力需要释放一些内存来存放新的cursor时,lck进程会将dictionary cache 的一些内存进行释放。4、lmon: global enqueue service monitor。
lmon用于监控整个集群的global enqueues和resources, 而且会执行global enqueue recovery。实例异常终止后,会由lmon来进行gcs内存方面的处理。当一个实例加入或者离开集群后,lmon会对lock和resource进行reconfiguration.也就是说当某个节点出现故障时,lmon负责集群重构,grd恢复等操作,另外lmon会在不同的实例间进行通讯检查,如果发现对方通讯超时,就会发出节点eviction,所以很多时候节点发生eviction后(ora-481, ora-29740等),我们需要查看lmon的trace来了解eviction的原因。
lmon主要借助两种心跳机制完成健康检查:
1)节点之间网络心跳,可以简单理解为节点间定时发送ping包检测节点状态,如果规定时间能收到回应,就认为对方状态正常
2)通过控制文件磁盘心跳,每个节点的ckpt进程每3秒更新一次controlfile的数据快,由于controlfile是共享的,所以实例之间可以检查对方是否及时更新controlfile来判断对方的状态。
5、diag: diagnostic capture process。
用来打印诊断信息。diag进程会响应别的进程发出的dump请求,将相关的诊断信息写到diag trace文件中。在rac上,当发出global oradebug请求时,会由每个实例的diag进程来打印诊断信息到diag trace中。
比如:下面的命令用了“-g”,那么生成的dump信息会分别写到每个实例的diag trace文件中:
sql>oradebug -g all hanganalyze 3
sql>oradebug -g all dump systemstate 2666、asmb: asm background process。
用于和asm实例进行通讯,用来管理storage和提供statistics。当使用asmcmd的cp命令时,需要用到asm实例上的asmb进程,数据库实例的spfile如果位于存于asm上,那么也会用到asmb进程。如果ocr存放在asm中,也会用到asmb。
7、rbal:asm rebalance master process。
作为asm磁盘组进行rebalance时的协调者(coordinator)。在数据库实例上,由它来管理asm磁盘组。
8、onnn:asm connection pool process。
是从数据库实例连接到asm实例上的一些连接池,通过这些连接池,数据库可以发送消息给asm实例。比如,由它将打开文件的请求发送给asm实例,这些连接池只处理一些较短的请求,不处理创建文件这种较长的请求。
------11g 特有的:9、ping:interconnect latency measurement process。
用来检查集群中各个实例间的私网通讯状况。每个实例每隔几秒会发送给其它实例一些消息,这些消息会由其它实例的ping进程收到。发送和接收信息花费的时间会被记录下来并判断是否正常。
10、lmhb: global cache/enqueue service heartbeat monitor。
监控本地的lmon, lmd, lck0,rms0 and lmsn等进程是否运行正常,是否被阻塞或者已经hang了。
11、rmsn:oracle rac management process。
完成对rac的一些管理任务,比如当一个新的实例加入到集群后,给这个实例创建相关的资源。
12、rsmn: remote slave monitor process。
管理后台的slave进程的创建,作为远程实例的协调者来完成一些任务。
13、gtxn: global transaction process。
在rac环境中对于xa 事务提供透明支持,维护在rac中的xa事务的global信息,完成global事务的两阶段提交。
14、rcbg: result cache background process。
这个进程用来处理rac上result cache相关的消息。
15、acms: atomic control file to memory service process。
作为每个实例上的agent来保证sga的更新在rac的所有实例上都是同步的,或者是全局成功提交,或者由于一些问题而导致全局回滚。
其它类似信息

推荐信息