Oracle RAC ‘Metrics Global Cache Blocks Lost‘告警解决处理

1. 引言:

前段时间鄙人检查处理过Oracle RAC 'Metrics Global Cache Blocks Lost'告警,在此总结分享下针对该报警的原因分析及处理办法。

2. 具体事件

通过排查发现造成该告警的原因是共享存储控制器损坏导致的。由于发生已经有段时间了,没有来得及整理相关报警日志,所以具体的告警排查分析以及处理过程就不再叙述了。下面给大家总结分享下针对该告警的可能原因及对应排查处理及解决方案。

3. 原因分析

Oracle数据库的告警 "Global Cache Blocks Lost i" 表示在RAC(Real Application Clusters)环境中,节点间因全局缓存(Global Cache)同步数据块时发生了丢失。常见原因有以下几类:

3.1 网络问题(大多数情况是由改原因触发)

  1. RAC节点间的私网(Interconnect)出现延迟、丢包或带宽不足,导致数据块传输失败。
  2. 网卡驱动、交换机配置错误或硬件故障。

3.2 存储性能瓶颈

  1. 存储I/O延迟过高,导致数据块无法及时写入或读取,触发全局缓存超时。
  2. 共享存储(如ASM磁盘组)响应缓慢。

3.3 资源争用(Resource Contention)

  1. 多个节点频繁请求同一数据块,引发 gc buffer busy 或 gc cr block busy 等待事件。
  2. 热点数据块(Hot Blocks)导致全局缓存争用。

3.4 Oracle参数配置不当

  1. lm_resources、gc* 相关参数(如 gc_latches)设置不合理。
  2. 私网通信参数(如 cluster_interconnects)未优化。

3.5 系统资源不足

CPU或内存资源不足,导致节点处理全局缓存请求缓慢。

4. 解决方案

4.1 检查网络健康状态

  1. 诊断网络延迟/丢包

    在RAC节点间执行ping测试(持续观察)

    ping <节点IP> -c 100

    使用traceroute检查路径

    traceroute <节点IP>

    使用OS工具检测丢包(如netstat)

    netstat -s | grep -i "errors|retransmit"

  1. 验证私网配置

确认 cluster_interconnects 参数指向正确的私网接口:SHOW PARAMETER cluster_interconnects;

使用高带宽、低延迟的专用网络(如InfiniBand或10G+以太网)。

4.2 优化存储性能

  1. 检查存储I/O延迟(使用 iostat、AWR报告 的 "Top 5 Timed Events" 或 V$EVENT_HISTOGRAM)。
  2. 避免存储热点,分散数据文件到多个磁盘组。
  3. 优化SQL以减少物理I/O(例如通过索引减少全表扫描)。

4.3 减少全局缓存争用

  1. 识别热点数据块

    -- 查询当前全局缓存争用
    SELECT * FROM GVSYSTEM_EVENT WHERE EVENT LIKE '%gc%'; -- 查找热点对象 SELECT FILE#, BLOCK#, CLASS#, COUNT(*) FROM GVSEGMENT_STATISTICS
    WHERE STATISTIC_NAME = 'gc buffer busy'
    GROUP BY FILE#, BLOCK#, CLASS#;

  2. 优化策略
    对热点表进行分区(Partitioning),分散数据块访问。
    使用应用层缓存(如Oracle Coherence)或调整应用逻辑,减少跨节点访问。

4.4 调整Oracle参数

  1. 优化全局缓存参数

    -- 增加资源限制(需谨慎评估)
    ALTER SYSTEM SET "_lm_resources"=2000 SCOPE=SPFILE;
    -- 调整全局缓存进程数
    ALTER SYSTEM SET gc_processes=4 SCOPE=SPFILE;

  2. 启用大帧(Jumbo Frames)
    如果网络支持,配置MTU为9000以减少小包传输开销。

4.5 检查系统资源

  1. 监控CPU利用率(top、vmstat)和内存压力(free -m)。
    确保RAC节点负载均衡,必要时使用Services隔离工作负载:

    -- 创建Service定向到特定节点
    EXEC DBMS_SERVICE.CREATE_SERVICE('OLAP_SVC', 'OLAP_SVC');
    EXEC DBMS_SERVICE.START_SERVICE('OLAP_SVC', 'node1');

4.6 收集诊断信息

  1. 生成AWR/ASH报告分析全局缓存事件:

    -- 生成AWR报告
    @?/rdbms/admin/awrrpt.sql
    -- 生成ASH报告
    @?/rdbms/admin/ashrpt.sql

  2. 检查Oracle日志:
    alert_.log
    crsd.log、cssd.log(Clusterware日志)

5. 注意事项

  1. 避免直接修改隐含参数:如 _lm_resources,需先联系Oracle Support评估。
  2. 测试环境验证:参数调整前在非生产环境验证。
  3. 长期监控:部署持续监控工具(如OEM、Prometheus),跟踪 gc blocks lost 趋势。
    4.及时收集以下信息:
    --AWR/ASH报告
    --RAC节点trace文件(diag/rdbms/<DB_NAME>//trace)
    --网络诊断结果(如tcpdump)

关注作者,您将获得更多OCP考试及Oracle DB方面的实战经验。后续不定期分享DB核心知识和排障案例及经验、性能调优等.

相关推荐
Mike117.4 小时前
GBase 8a 日期边界写法和时间窗口取数偏差
数据库
SPC的存折5 小时前
1、Redis数据库基础
linux·运维·服务器·数据库·redis·缓存
爱学习的小囧6 小时前
VMware ESXi 6.7U3v 新版特性、驱动集成教程和资源包、部署教程及高频问答详情
运维·服务器·虚拟化·esxi6.7·esxi蟹卡驱动
小疙瘩6 小时前
只是记录自己发布若依分离系统到linux过程中遇到的问题
linux·运维·服务器
dldw7777 小时前
IE无法正常登录windows2000server的FTP服务器
运维·服务器·网络
我是伪码农7 小时前
外卖餐具智能推荐
linux·服务器·前端
汤愈韬8 小时前
下一代防火墙通用原理
运维·服务器·网络·security
皮皮林5518 小时前
强烈建议大家使用 Linux 做开发?
linux
IMPYLH8 小时前
Linux 的 od 命令
linux·运维·服务器·bash
MatrixOrigin9 小时前
数据库没有死,只是范式变了
数据库·oracle