[转帖]global cache cr request等待事件分析及优化

global,cache,cr,request,等待,事件,分析,优化 · 浏览次数 : 0

小编点评

# 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 # Global Cache Prepare Failures 8 Global Cache Skip Prepare Failures 3408 24 rows selected. By using the query V$BH, we can get the current buffer information. # Select status, count(*) from v$bh group by status STATU COUNT(*) ----- ---------- cr 67 free 8571 scur 10636 xcur 43094 # We can reduce the PI and buffer CR copy to alleviate global cache CR request wait events, and the actual processing method and handling db file sequential/scattered read wait events are the same. # Here is the content generation process. # Generate content when the content is generated # 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 prepare failures 8 global cache skip prepare failures 3408

正文

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

在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.1Cache 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

 

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

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

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

在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.1Cache 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

 

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

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

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

与[转帖]global cache cr request等待事件分析及优化相似的内容:

[转帖]global cache cr request等待事件分析及优化

在RAC环境中,和全局调整缓存相关的最常见的等待事件无非就是:global cache cr request,global cache busy和equeue 在XX电信做了一次数据库巡检中发现,spreport中的top 5 wait events中出现了global cache cr reque

[转帖]RAC AWR重要指标说明

1.Global Cache Load Profile Global Cache blocks received: 接收到的全局缓冲块 Global Cache blocks served: 发送的全局缓冲块 GCS/GES messages received: GCS消息接收 GCS/GES me

[转帖]DISK BUSY的理解误区

前几天有个客户的系统存在性能问题,从AWR报告上我们看到是CPU使用率过高,同时GLOBAL CACHE方面的争用比较严重。系统中的烂SQL很多,数据库中很多几十GB的大表也没有分区,总之问题很多。不过这套系统使用了闪存盘,虽然IOPS高达3-4万,不过磁盘IO的性能还可以。USER IO平均值为2

[转帖]DISK BUSY的理解误区

https://www.modb.pro/db/619209 前几天有个客户的系统存在性能问题,从AWR报告上我们看到是CPU使用率过高,同时GLOBAL CACHE方面的争用比较严重。系统中的烂SQL很多,数据库中很多几十GB的大表也没有分区,总之问题很多。不过这套系统使用了闪存盘,虽然IOPS高

[转帖]DISK BUSY的理解误区

https://www.modb.pro/db/619209 前几天有个客户的系统存在性能问题,从AWR报告上我们看到是CPU使用率过高,同时GLOBAL CACHE方面的争用比较严重。系统中的烂SQL很多,数据库中很多几十GB的大表也没有分区,总之问题很多。不过这套系统使用了闪存盘,虽然IOPS高

[转帖]如何使用手表作为指南针(以北半球为例)

https://www.citizenwatch-global.com/support/exterior/direction_sc.html 通过对比时针与太阳的位置可确定大致方位。要注意这样确定的方位是大致上的,因为在不同纬度和不同季节会有一些差异。将手表平放并将手表的时针指向太阳方向。则时针指向

[转帖]Linux:页表中PGD、PUD、PMD、TLB等概念介绍

1、PGD: Page Global Directory Linux系统中每个进程对应用户空间的pgd是不一样的,但是linux内核 的pgd是一样的。当创建一个新的进程时,都要为新进程创建一个新的页面目录PGD,并从内核的页面目录swapper_pg_dir中复制内核区间页面目录项至新建进程页面目

[转帖]Linux中的Grep命令(在文件中查找文本)

[日期:2020-05-14] 来源:Linux公社 作者:醉落红尘 [字体:大 中 小] grep命令是(global regular expression print,全局正则表达式输出)的缩写,它是Linux中功能最强大且最常用的命令之一。 grep在一个或多个输入文件中搜索与给定模式匹配的行

[转帖]TiDB的系统变量

TiDB 系统变量的行为与 MySQL 相似但有一些不同,变量的作用范围可以是全局范围有效 (Global Scope)、实例级别有效 (Instance Scope) 或会话级别有效 (Session Scope),或组合了上述多个范围。其中: 对 GLOBAL 作用域变量的更改,设置后只对新 T

[转帖]Linux中的grep -v、-e、-E用法小结

https://www.jb51.net/article/266590.htm grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来,这篇文章主要介绍了Linux之grep -v、-e、-E用法总结,需要的朋友可以参考下 + 目录 简介 grep (global sea