共计 1605 个字符,预计需要花费 5 分钟才能阅读完成。
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 资源相关的等待事件。
更多 Oracle 相关信息见 Oracle 专题页面 https://www.linuxidc.com/topicnews.aspx?tid=12
: