千家信息网

如何诊断RAC系统中的'gc cr multi block request'?

发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,By: Jane Zhang | Senior Support Manager'gc cr multi block request' 是RAC数据库上比较常见的一种等待事件,在RAC 上进行全表扫描(
千家信息网最后更新 2025年02月03日如何诊断RAC系统中的'gc cr multi block request'?By: Jane Zhang | Senior Support Manager

'gc cr multi block request' 是RAC数据库上比较常见的一种等待事件,在RAC 上进行全表扫描(Full Table Scan)或者全索引扫描(Index Fast Full Scan)时,容易产生这样的多块读等待。

这种等待产生的主要原因:
1. 数据库参数db_file_multiblock_read或者db_block_size设置太大,导致多块读时GC传输量太大;
2. OS上UDP相关的参数设置不够大导致接收发送UDP的缓存区溢出;
3. 私网性能;
4. LMS设置问题(个数不足或者不是实时运行(real time))导致LMS的处理能力不够,不能及时传输global cache data/message。

这方面的Bug比较少,在11.2之前有一个BUG 8464597,当db_block_size = 32k时,引发大量"gc cr multi block request" 而且性能下降,这个Bug在11.2已经修复。
很多情况下,降低DB_FILE_MULTIBLOCK_READ_COUNT 并且 加大OS UDP相关参数会将极大缓解'gc cr multi block request' 等待。

最近处理了一个问题,从10.2升级到11.2.0.3后产生大量'gc cr multi block request' 等待,发现DB_FILE_MULTIBLOCK_READ_COUNT, UDP 参数等都没有改变,只是升级后LMS的个数在不同实例间不同而且下降了很多,后来把LMS个数增加并且各个实例值保持一致后,问题得到解决。

Avg
wait % DB
Event Waits Time(s) (ms) time Wait Class
------------------------------ ------------ ----------- ------ ------ ----------
gc cr multi block request 632,923 32,441 51 35.5 Cluster
DB CPU 13,518 14.8
gc cr grant 2-way 327,717 10,900 33 11.9 Cluster
gc current grant 2-way 190,856 6,855 36 7.5 Cluster
gc current block 2-way 101,154 3,792 37 4.1 Cluster

如果发现AWR TOP5 等待中存在'gc cr multi block request' 而且它的Avg wait(ms)较高,那么请参考下面的诊断步骤:

第一步,查看db_file_multiblock_read_count和db_block_size参数设置。

SQL>show parameter db_block_size
SQL>show parameter db_file_multiblock_read_count

db_block_size一般为8192, db_file_multiblock_read_count一般为16.

第二步,参看OS udp相关参数设置,udp 的参数在不同的OS上是不同的,这些参数会设置UDP的接收缓存区和发送缓存区的大小,一般来说接收缓存区要>=发送缓存区。 如果在生产库修改这些参数,最好咨询OS厂商了解注意事项。

AIX上:
#no -a
udp_recvspace
udp_sendspace

o 设置udp_sendspace >=[(DB_BLOCK_SIZE * DB_FILE_MULTIBLOCK_READ_COUNT) + 4096],但是不低于 65536.
比如,DB_BLOCK_SIZE=8192, DB_FILE_MULTIBLOCK_READ_COUNT=16,那么udp_sendspace>= (8192 * 16) + 4096=135168.注意这个值只是最低值,并不是Oracle要求必须设置这么大。
o 设置udp_recvspace 为 4到10倍 udp_sendpace
o 由于sb_max 必须 >= udp_recvspaceIf ,可能需要增加sb_max的值(默认为1048576)
o 如果udp的参数设置不合理,可能会产生"socket buffer overflows",如果这个值非0, 需要增加udp_recvspace:
netstat -s | grep "socket buffer overflows"
o 参考资料:http://www-03.ibm.com/support/techdocs/atsmastr.nsf/WebIndex/WP100883
Minimum Software Versions and Patches Required to Support Oracle Products on IBM Power Systems (Doc ID 282036.1)

Linux上:
#More /etc/sysctl.conf

net.core.rmem_default
net.core.rmem_max
net.core.wmem_default
net.core.wmem_max

官方文档上要求的最低值:
http://docs.oracle.com/cd/E11882_01/install.112/e24321/pre_install.htm#BABDAEDB
Oracle Database Installation Guide
11g Release 2 (11.2) for Linux
E24321-07
rmem_default 262144
rmem_max 4194304
wmem_default 262144
wmem_max 1048576

可以将这几个值都设为4k:
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 4194304
net.core.wmem_max = 4194304

HP上:

请检查UDP设置是否足够大:
$ /bin/ndd -get /dev/sockets socket_udp_rcvbuf_default
$ /bin/ndd -get /dev/sockets socket_udp_sndbuf_default

确保socket_udp_rcvbuf_default至少是socket_udp_sndbuf_default的两倍。

Sun:
可以用下面的命令查看UDP设置:
ndd /dev/udp udp_xmit_hiwat
ndd /dev/udp udp_recv_hiwat
ndd /dev/udp udp_max_buf

可以用下面的命令设置这两个值为OS最大允许的:
ndd -set /dev/udp udp_xmit_hiwat
ndd -set /dev/udp udp_recv_hiwat
ndd -set /dev/udp udp_max_buf <1M or higher>

更多信息,可以参考MOS文档:
Tuning Inter-Instance Performance in RAC and OPS (Doc ID 181489.1)

第三步,查看网络情况。
比如用netstat -s 命令查看是否有bad data length, bad checksums, incomplete headers, socket buffer overflows等,注意这些值是累计的,需要查看它们在发生问题的时候是否有增加。
另外可以查看AWR中是否有 "Global Cache Blocks Lost" ,理想情况下这个值是0,如果有较大的block lost,说明网络有问题(按照MOS 文档563566.1进行网络检查)。
还可以请网管查看私网的性能情况。

第四步,检查LMS。
1. 查看LMS的trace file,查看是否有异常。
2. 查看LMS进程的优先级是否是实时的(real time)的?

比如AIX:
# ps -elf|grep lms

ps -elf|grep lms
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
240103 A oracle 4719002 1 5 39 -- 8ae40b590 248856 Jul 28 - 570:45 ora_lms0_rac1

priority 越小说明优先级越高,PRI小于40说明是Real Time的:
http://aix4admins.blogspot.co.uk/2011/08/commands-and-processes-process-you-use.html

3. 查看LMS的个数:
SQL>show parameter GCS_SERVER_PROCESSES
这个值决定了LMS的个数

这个值依赖于CPU的个数(cpu_count),根据11.2官方文档:
http://docs.oracle.com/cd/E11882_01/server.112/e25513/initparams094.htm#REFRN10259
Default value
If 1 - 3 CPUS, then 1
If 4 - 15 CPUs, then 2
If 16 or more CPUs, then 2 + (CPUs / 32). If the result includes a fraction, then the fraction is disregarded. For example, if you had 20 CPUs, then 2 + (20 / 32) would equal 2 GCS processes.
If CLUSTER_DATABASE is set to false, then 0
If ASM, then 1

在AIX上,有的时候CPU可能是动态增加的,那么一定要注意检查LMS进程的个数是否随之调整了。

有关这个问题的讨论,可以在中文社区帖子中进行 如何诊断RAC系统中的'gc cr multi block request'?

参数 个数 问题 存区 不同 情况 文档 面的 检查 命令 性能 网络 参考 最低 不够 优先级 只是 官方 实例 实时 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库m类参考文献 河南高性能服务器供应公司 一年级校园网络安全黑板报 南京专业医疗健康软件开发 字节跳动服务器案件 多对多数据库表主键 网络安全等保测评师考试 阿里云服务器优点 2018年专业技员网络安全 专业音乐软件开发入门 网络安全知识竞赛主题词 王者内语音服务器未连接 怎么实现网站与服务器的长链接 服务器电脑怎么管理 育碧商店无法连接服务器 1.2信息交流与网络安全 数据库添加数据的方法是 长宁区品质软件开发费用是多少 软件开发后项目维护合同 罗汉琛 cba数据库 网络安全狗资源保护在哪里 陕西博导软件开发 360网络安全是中国第一吗 学一个月数据库原理可以专升本吗 nb lot网络安全部分 徐州市戴尔服务器回收 我的世界粉碎英雄服务器哪里下载 数据库技术运用课程内容 服务器内存与普通内存编号 局域网络技术有几种
0