关于 Oracle RAC 等待事件

TongFn 2018-08-24

PCM资源相关的等待事件

gc current/cr block request:这个等待事件说明申请实例要申请一个当前块或CR块,但是资源主实例的LMS进程还没有响应它的请求。

gc current/cr block 2 way:这个等待事件说明申请实例通过一个2路通信,向远程实例申请了一个当前块或CR块。

gc current/cr block 3 way:这个等待事件说明申请实例通过一个3路通信,向远程实例申请了一个当前块或CR块。

gc current/cr block busy:这个等待事件说明申请实例向远程实例申请一个当前块或CR块,而远程实例在发送这个数据块时发现它正在被其他进程使用。

gc current/cr grant 2-way:这个等待事件说明申请实例向资源主实例申请了一个当前块或CR块,而且这个申请已经被资源主实例响应。

gc current/cr grant 2-way与gc current/cr block 2/3-way的区别在于,这个被申请的数据块不包含在任何实例的buffer cache中,需要申请实例自己从数据文件读取,所以不会有等待事件gc current/cr grant 3-way存在,因为这时只有资源申请实例和资源主实例,没有资源持有实例。而在gc current/cr block 2/3-way中,申请实例获得的数据块是远程实例发送过来的,申请实例,主实例和持有实例可能是3个不同实例。在gc current/cr grant 2-way出现后,下一步就是从数据文件中读取数据,这也是为什么gc current/cr grant 2-way与db file sequential read 或者db file scattered read等待事件同时出现的原因。

gc current grant busy:这个等待事件说明申请实例申请了一个当前块,而且资源主实例也已经确认申请实例可以持有这个数据块,但是申请者在等待其他申请者完成它们的申请请求。这个等待事件说明申请者是以排他方式申请数据块的,但是其他实例上还有一些申请者以共享的方式申请这个快,所以排他的申请请求要等待比它先到达的共享请求。grant busy只会出现在当前块上,对应CR块,因为进程不能修改一个CR块中已经存在的数据,所以不存在等待事件gc cr grant busy

gc current/cr block congested:这个等待事件说明申请实例向远程实例申请了一个当前块或CR块,而远程实例已经收到了这个请求,但是LMS进程并没有响应这个请求--将数据块发送给申请实例。

gc current/cr grant congested:这个等待事件说明申请实例向远程实例申请了一个当前块或CR块,而远程实例已经收到了这个请求,但是LMS进程并没有响应这个请求--将反馈信息发送给申请实例。

gc cr failure/gc current retry:这个等待事件说明申请实例没有收到一个当前块或CR块。

gc current/cr multi block request:这个等待事件说明申请实例需要向远程实例申请多个当前块或CR块。

这个等待事件只有在申请的所有数据库都被成功返回之后才会结束,如果其中的一个数据库因为某种原因没有被成功接收,就需要重新申请所有的数据块。这也是为什么gc current/cr multi block request经常和等待事件gc cr failure/gc current retry同时出现的原因。

如何减少PCM资源相关的等待事件呢?减少数据块在多个实例间的传递,通过创建Service资源使业务系统固定连接到某一个实例。业务系统访问的数据块都在一个实例的buffer cache中,也就不需要在实例间传递数据块了,也就减少了PCM资源相关的等待事件。

相关推荐