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 资源相关的等待事件.
来源: http://www.linuxidc.com/Linux/2018-08/153686.htm