在RAC环境中,和全局调整缓存相关的最常见的等待事件无非就是:global cache cr request,global cache busy和equeue

在XX电信做了一次数据库巡检中发现,spreport中的top 5 wait events中出现了global cache cr request等待事件,

那么这个等待事件是什么原因引起的呢?

首先,我们来看看这个等待事件是如何产生的,当一个进程访问需要一个或者多个块时,oracle会首先检查自己的CACHE是否存在该块,如果发现没有,就会先通过global cache赋予这些块共享访问的权限,然后再访问。假如,通过global cache 发现这些块已经在另一个实例的CACHE里面,那么这些块就会通过CACHE FUSION,在节点之间直接传递,

同时出现global cache cr request等待事件

注意:在10G中,global cache cr request 已经简称为 gc cr request

从remote cache运输块到本地cache花费的时间还得看这些块是共享还是独占模式,如果块是共享(scur)的,REMOTE CACHE就克隆信息传送过来,否则就要产生一个PI,然后再传送过去。显然,global cache cr request等待事件和db file sequential/scattered read 等待事件有着直接的关系。

通常,RAC中的进程会等待1S去尝试从本地或者远程CACHE读取数据块信息,当然,这还得依靠块处于什么样的模式。如果超过了1S,那就表明节点之间连接慢,这个时候节点之间就使用private连接,而 客户端的连接使用public,有时候,节点之间的连接, Cache Fusion就不会通过公共网络,在这种情况下,就会有大量的global cache cr request等待事件出现,你可以使用oradebug ipc命令去验证下节点之间的连接是否使用了private network。

例如:

SQL> oradebug setmypid

Statement processed.

SQL> oradebug ipc

Information written to trace file.

SQL> oradebug tracefile_name

/home/oracle/admin/rac/udump/rac1_ora_3194.trc

SKGXPCTX: 0xb3ca990 ctx

admono 0x1e00b916 admport:

SSKGXPT 0xb3caa78 flags info for network 0

socket no 8 IP 192.168.1.1 UDP 53064

sflags SSKGXPT_UP

info for network 1

socket no 0 IP 0.0.0.0 UDP 0

sflags SSKGXPT_DOWN

active 0 actcnt 1

context timestamp 0

从上面你可以看到IP 92.168.1.1在Cache Fusion使用,而且协议是UDP默认情况下,节点之间的连接是采取TCP协议的,为了更改这个而使用告诉内部连接,你需要进行以下操作。例如,默认情况下,在LINUX操作系统上,节点之间的连接使用UDP,这个信息你可以从后台日志中看到:

cluster interconnect IPC version:Oracle UDP/IP

IPC Vendor 1 proto 2 Version 1.0

为了使用高速连接,关闭ORACLE所有服务,重新连接如下:

$ make -f ins_rdbms.mk rac_on ipc_hms ioracle

如果你想重新使用UDP,则

$ make -f ins_rdbms.mk rac_on ipc_udp ioracle

当会话从开始提交一致读的请求,到它获取请求信息,这个过程它是SLEEP状态的,对我们而言吹降木褪?/span>global cache cr request等待事件,而wait time就是记录这个过程的时间。

通常,大量的global cache cr request主要有以下几个原因:

1 节点之间内部连接慢或者节点之间传输带宽窄。这个可以通过重新连接获取高速连接

2 存在热点数据块的竞争

3 CPU负载过高或者LMS后台进程不够。正常情况下,只有两个LMS后台进程从CPU那里获取资源,增加LMS进程的数量或者提高它的优先权能够帮助从CPU那里获取更多的资源。隐藏参数 _lm_lms是设置LMS进程数量的

4 大量未提交的事务或者系统磁盘设备传输慢

有关global cache的信息:

SQL> select name,value from v$sysstat where name like '%global cache%';

NAME VALUE

---------------------------------------------------------------- ----------

global cache gets 1791587

global cache get time 85911

global cache converts 179612

global cache convert time 1262

global cache cr blocks received 17189

global cache cr block receive time 31547

global cache current blocks received 4627

global cache current block receive time 763

global cache cr blocks served 16805

global cache cr block build time 72

global cache cr block flush time 25043

NAME VALUE

---------------------------------------------------------------- ----------

global cache cr block send time 54

global cache current blocks served 3529

global cache current block pin time 21

global cache current block flush time 0

global cache current block send time 15

global cache freelist waits 285

global cache defers 2

global cache convert timeouts 0

global cache blocks lost 0

global cache claim blocks lost 0

global cache blocks corrupt 0

NAME VALUE

---------------------------------------------------------------- ----------

global cache prepare failures 8

global cache skip prepare failures 3408

24 rows selected.

通过查询V$BH视图,获取当前缓冲区的信息:

SQL> select status,count(*)from v$bh group by status;

STATU COUNT(*)

----- ----------

cr 67

free 8571

scur 10636

xcur 43094

上面的2,4可通过减少PI和缓冲区的CR拷贝缓解global cache cr request等待事件,

实际上2的处理方法和处理db file sequential/scattered read 等待事件是一样的,这里不在叙述。

在RAC环境中,和全局调整缓存相关的最常见的等待事件无非就是:global cache cr request,global cache busy和equeue

在XX电信做了一次数据库巡检中发现,spreport中的top 5 wait events中出现了global cache cr request等待事件,

那么这个等待事件是什么原因引起的呢?

首先,我们来看看这个等待事件是如何产生的,当一个进程访问需要一个或者多个块时,oracle会首先检查自己的CACHE是否存在该块,如果发现没有,就会先通过global cache赋予这些块共享访问的权限,然后再访问。假如,通过global cache 发现这些块已经在另一个实例的CACHE里面,那么这些块就会通过CACHE FUSION,在节点之间直接传递,

同时出现global cache cr request等待事件

注意:在10G中,global cache cr request 已经简称为 gc cr request

从remote cache运输块到本地cache花费的时间还得看这些块是共享还是独占模式,如果块是共享(scur)的,REMOTE CACHE就克隆信息传送过来,否则就要产生一个PI,然后再传送过去。显然,global cache cr request等待事件和db file sequential/scattered read 等待事件有着直接的关系。

通常,RAC中的进程会等待1S去尝试从本地或者远程CACHE读取数据块信息,当然,这还得依靠块处于什么样的模式。如果超过了1S,那就表明节点之间连接慢,这个时候节点之间就使用private连接,而 客户端的连接使用public,有时候,节点之间的连接, Cache Fusion就不会通过公共网络,在这种情况下,就会有大量的global cache cr request等待事件出现,你可以使用oradebug ipc命令去验证下节点之间的连接是否使用了private network。

例如:

SQL> oradebug setmypid

Statement processed.

SQL> oradebug ipc

Information written to trace file.

SQL> oradebug tracefile_name

/home/oracle/admin/rac/udump/rac1_ora_3194.trc

SKGXPCTX: 0xb3ca990 ctx

admono 0x1e00b916 admport:

SSKGXPT 0xb3caa78 flags info for network 0

socket no 8 IP 192.168.1.1 UDP 53064

sflags SSKGXPT_UP

info for network 1

socket no 0 IP 0.0.0.0 UDP 0

sflags SSKGXPT_DOWN

active 0 actcnt 1

context timestamp 0

从上面你可以看到IP 92.168.1.1在Cache Fusion使用,而且协议是UDP默认情况下,节点之间的连接是采取TCP协议的,为了更改这个而使用告诉内部连接,你需要进行以下操作。例如,默认情况下,在LINUX操作系统上,节点之间的连接使用UDP,这个信息你可以从后台日志中看到:

cluster interconnect IPC version:Oracle UDP/IP

IPC Vendor 1 proto 2 Version 1.0

为了使用高速连接,关闭ORACLE所有服务,重新连接如下:

$ make -f ins_rdbms.mk rac_on ipc_hms ioracle

如果你想重新使用UDP,则

$ make -f ins_rdbms.mk rac_on ipc_udp ioracle

当会话从开始提交一致读的请求,到它获取请求信息,这个过程它是SLEEP状态的,对我们而言吹降木褪?/span>global cache cr request等待事件,而wait time就是记录这个过程的时间。

通常,大量的global cache cr request主要有以下几个原因:

1 节点之间内部连接慢或者节点之间传输带宽窄。这个可以通过重新连接获取高速连接

2 存在热点数据块的竞争

3 CPU负载过高或者LMS后台进程不够。正常情况下,只有两个LMS后台进程从CPU那里获取资源,增加LMS进程的数量或者提高它的优先权能够帮助从CPU那里获取更多的资源。隐藏参数 _lm_lms是设置LMS进程数量的

4 大量未提交的事务或者系统磁盘设备传输慢

有关global cache的信息:

SQL> select name,value from v$sysstat where name like '%global cache%';

NAME VALUE

---------------------------------------------------------------- ----------

global cache gets 1791587

global cache get time 85911

global cache converts 179612

global cache convert time 1262

global cache cr blocks received 17189

global cache cr block receive time 31547

global cache current blocks received 4627

global cache current block receive time 763

global cache cr blocks served 16805

global cache cr block build time 72

global cache cr block flush time 25043

NAME VALUE

---------------------------------------------------------------- ----------

global cache cr block send time 54

global cache current blocks served 3529

global cache current block pin time 21

global cache current block flush time 0

global cache current block send time 15

global cache freelist waits 285

global cache defers 2

global cache convert timeouts 0

global cache blocks lost 0

global cache claim blocks lost 0

global cache blocks corrupt 0

NAME VALUE

---------------------------------------------------------------- ----------

global cache prepare failures 8

global cache skip prepare failures 3408

24 rows selected.

通过查询V$BH视图,获取当前缓冲区的信息:

SQL> select status,count(*)from v$bh group by status;

STATU COUNT(*)

----- ----------

cr 67

free 8571

scur 10636

xcur 43094

上面的2,4可通过减少PI和缓冲区的CR拷贝缓解global cache cr request等待事件,

实际上2的处理方法和处理db file sequential/scattered read 等待事件是一样的,这里不在叙述。

文章知识点与官方知识档案匹配,可进一步学习相关知识

[转帖]global cache cr request等待事件分析及优化的更多相关文章

  1. global cache cr request

    当一个进程访问需要一个或者多个块时,它会首先检查自己的CACHE是否存在该块,如果发现没有,就会先通过global cache赋予这些块 共享访问的权限,然后再访问.假如,通过global cache ...

  2. 怎么发现RAC环境中'library cache pin'等待事件的堵塞者(Blocker)?

    怎么发现RAC环境中的'library cache pin'等待事件的堵塞者(Blocker) 參考自 How to Find the Blocker of the 'library cache pi ...

  3. latch - undo global data等待事件分析

    一环境跑压力测试的时候,标题所述等待事件在top N中.不用查,也知道是因为undo竞争的事件. 根据metalink文档解释,是由于undo表空间不足引起的. This implies that s ...

  4. DBA_Oracle Event等待事件分析(概念)

    2014-12-18 Created By BaoXinjian

  5. Oracle RAC 全局等待事件 gc current block busy 和 gc cr multi block request 说明--转载(http://blog.csdn.net/tianlesoftware/article/details/7777511)

    一.RAC 全局等待事件说明 在RAC环境中,和全局调整缓存相关的最常见的等待事件是global cache cr request,global cache busy和equeue. 当一个进程访问需 ...

  6. Oracle 等待事件 db file sequential read

    db file sequential read-数据文件顺序读取 等待事件: "db file sequential read" Reference Note (文档 ID 345 ...

  7. Oracle中常见的33个等待事件小结

    在Oracle 10g中的等待事件有872个,11g中等待事件1116个. 我们可以通过v$event_name 视图来查看等待事件的相关信息     一. 等待事件的相关知识 1.1 等待事件主要可 ...

  8. 30种oracle常见的等待事件说明

    1Buffer busy waits从本质上讲,这个等待事件的产生仅说明了一个会话在等待一个Buffer(数据块),但是导致这个现象的原因却有很多种.常见的两种是: 当一个会话视图修改一个数据块,但这 ...

  9. ORACLE 常见等待事件

    一. 等待事件的相关知识 1.1 等待事件主要可以分为两类,即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件.1). 空闲等待事件指ORACLE正等待某种工作,在诊断和优化数据库的时候, ...

  10. oracle常见的等待事件说明

    转自 http://blog.itpub.net/29371470/viewspace-1063994/ 1. Buffer busy waits 从本质上讲,这个等待事件的产生仅说明了一个会话在等待 ...

随机推荐

  1. 小乌龟(TortoiseGit)配置SSH

    小乌龟(TortoiseGit)配置SSH 使用gerrit作为项目管理,使用console窗口命令,我真是不记得太多git命令,因此交给小乌龟可视化操作,简单方便.这里记录下配置SSH公钥私钥. 前 ...

  2. 十分钟教你在 k8s 中部署一个前后端应用

    转载至我的博客https://www.infrastack.cn ,公众号:架构成长指南 大家好,我是蜗牛哥,好多开发人员,尤其是没接触过 k8s 的人员对如何在k8s中部署一个 前后端应用很模糊,不 ...

  3. 用GaussDB(for Redis)存画像,推荐业务轻松降本60%

    摘要:用户画像存储是推荐业务核心,但开源Redis无法胜任.华为云高斯Redis是最佳存储选型,轻松降本60%,同时获得企业级高稳定性. 本文分享自华为云社区<华为云GaussDB(for Re ...

  4. 云小课 | 华为云KYON:网段零修改上云,简单又好用

    摘要:KYON(Keep Your Own Network)是华为云推出的企业级云网络解决方案,KYON能让用户直接将IDC组网搬到云上,网段零修改,简单又好用. 本文分享自华为云社区<[云小课 ...

  5. 一文讲述G6实现流程图绘制的常用方法

    摘要:G6 是一个图可视化引擎.它提供了图的绘制.布局.分析.交互.动画等图可视化的基础能力. 本文分享自华为云社区<会用这些的api,轻松绘制流程图--antv.g6流程图入门>,作者: ...

  6. iOS应用程序发布流程:从测试到上架的完整指南

    ​ 目录 转载:iOS应用程序的签名.重签名和安装测试 前言 打开要处理的IPA文件 设置签名使用的证书和描述文件 开始ios ipa重签名 转载:iOS应用程序的签名.重签名和安装测试 前言 ipa ...

  7. Solon 在 jdk 各版本反射权限问题的处理指南

    jdk17 如果出现反射权限问题.可添加jvm参数:--add-opens (取消了 illegal-access 参数) #示例: java --add-opens java.base/java.l ...

  8. selenium多标签,多表单切换

    Selenium多标签之间的切换 多标签之间的切换 有的时候点击一个链接,新页面并非由当前页面跳转过去,而是新打开一个页面打开,这种情况下,计算机需要识别多标签或窗口的情况 获取所有窗口的句柄 han ...

  9. 01-什么是 Java:Java 初学者指南

    什么是Java? Java 是一种用于互联网分布式环境的面向对象编程语言.它是一种高级语言,也易于阅读和理解.有了它,开发人员可以"编写一次,随处运行"(WORA),这意味着编译后 ...

  10. 方法记录 | 文件批量导入Goodnotes

    一般来说通常资料都是用网盘下载了很多文件,想用Goodnotes来写批注,记笔记等,但是由于网盘不能直接分享.也不能批量分享到Goodnotes,给学习带来了很大的麻烦. 当然有钱的大佬们呢直接开了 ...