gc current/cr block request类等待事件
PCM资源相关的等待事件PCM资源(也就是数据块资源)对应的等待事件大部分都是以gc开头的,而且等待事件的名称与之前介绍的统计信息的名称是相对应的。
(1)基本概念
当进程申请gc相关的数据块时,会发生实例之间的数据块和消息传递,而且可以划分成不同的阶段,整个过程是比较复杂的,所以Oracle采用了一个办法,就是把gc等待事件名称分成几个部分,每个部分都具有一定的含义,这样就能够通过等待事件的名称,清楚地了解对应的请求到达了哪个阶段,出现了什么情况。gc相关的等待事件是由以下的部分构成的:
1)标识符:一定是gc(global cache)。
2)buffer的类型:可能是当前或者CR。
3)完成的阶段:如果是块,表示已经获得了PCM锁,要去访问buffer了;如果是grant,表示还处在获得PCM锁的过程中,还没有开始访问buffer。
4)性能提示(或者叫可能出现性能问题的地方):如果是2-way或者3-way,表明问题出现在网络层面或者主机层面;如果是busy,说明问题出现在buffer上;如果是congested,说明问题出现在LMS进程上。
另外,由于PCM资源实际上是数据块,所有gc相关的等待事件的p1、p2、p3的含义都是和数据块相关的,p1表示文件编号,p2表示数据块编号,p3表示申请模式、持有模式和数据块类型。
正是由于GCS的等待事件包含了上面的信息,所以很多时候,当看到一个等待事件时事实上就完全都能够知道问题出现在哪个阶段,再结合等待事件的p1、p2、p3参数中的信息,就可以找到出现问题的buffer,很容易定位出现问题的方向。
这也就是Oracle从11g版本开始提到的Fixup等待事件的含义所在。而所谓的placeholder等待事件是指一个请求处于中间阶段,还没有收到任何的消息反馈,而当收到消息反馈之后,就会开始等待一个真正的等待事件,所以,placeholder等待事件是指用户(或者后台)进程想要做一件事情,但是这件事情还没有被LMS响应,真正的消息和数据块交互过程还没有开始。
(2)gc等待事件下面逐一介绍常见的gc相关的等待事件。
1)gc current/cr block request:这个等待事件表示当前的进程要申请一个当前块或CR块,但是资源主节点的LMS进程还没有响应它的请求,也就是说,这个等待事件是一个placeholder等待事件,因为真正的消息传输和数据传输还没有开始。
2)gc current/cr block 2 way:这个等待事件表示当前进程通过一个2路通信,向远程实例申请了一个current或者CR块,而这个申请请求在整个申请过程中并没有出现过超时。
3)gc current/cr block 3 way:这个等待事件和gc current/cr block 2 way基本一致,只不过这个请求需要经过3个实例。
如果在数据库性能出现问题时发现gc current/cr block 2 way或者gc current/crblock 3 way的等待次数很多而且消耗了很多时间,那么这可能表示有以下的问题。
问题1:私有网络带宽出现了问题。
问题2:UDP层面出现了问题。如果使用了RDS的话,可能表示RDS层面出现了问题。
问题3:系统资源出现了问题。例如:CPU出现了竞争、过长的run queue。
所以,需要检查下面的统计信息。
信息1:内存融合的数据传输延迟长短,也就是AWR报告中的Global Cache andEnqueue Services-Workload Characteristics一节。
信息2:查看私网的流量是否正常。
信息3:操作系统级别的UDP参数是否设置正常。
信息4:操作系统级别的CPU是否出现异常。
如果从应用程序的角度来讲,可能的原因有以下几个
原因1:热点块问题。
原因2:针对少量数据块的并发读、写操作过于频繁。
原因3:如果是CR块的话,可能是过多的事务被指定到了少量的回滚段。
4)gc current/cr block busy:这个等待事件说明本地进程向远程实例申请一个当前块或者CR块,而远程实例在发送这个数据块时发现它正在被其他进程使用(或者被其他进程pin住)。需要说明的是,因为在申请当前块的时候可能会发生redoflush,这部分时间也是要计算在gc current block busy等待时间之内的。同样,对于CR块的请求,服务实例需要构建CR块,而且也可能会发生redo flush,这两部分时间也是要计算在gc cr block busy等待时间之内的。当发现gc currentblock busy等待出现了很多次,而且产生了很长的等待时间的话,需要查看一下相关信息去进一步分析。
信息1:远程实例的AWR的Global Cache and Enqueue Services-WorkloadCharacteristics一节中Avg global cache current block pin time(ms)和Avgglobal cache current block flush time(ms)部分的统计值。如果没有AWR的信息,也可以查看视图V$INSTANCE_CACHE_TRANSFER中与当前块相关的列。
信息2:远程实例的LGWR进程的跟踪日志文件和log file sync的等待时间、次数。
信息3:远程实例的DBWR的性能和checkpoint incomplete的次数。