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核心知识和排障案例及经验、性能调优等.

相关推荐
娃哈哈哈哈呀22 分钟前
组件通信-v-model
java·服务器·前端
2022计科一班唐文22 分钟前
数据库所有知识
数据库·mysql
Johny_Zhao40 分钟前
Oracle、MySQL、SQL Server、PostgreSQL、Redis 五大数据库的区别
linux·redis·sql·mysql·信息安全·oracle·云计算·shell·yum源·系统运维
杜大哥1 小时前
Linux:如何查看Linux服务器的磁盘、CPU、内存信息?
linux·运维·服务器
木木子99991 小时前
SQL中的Subquery & CTE & Temporary Table 区别
数据库·sql
钢铁男儿1 小时前
C# 类成员的访问:内部与外部
服务器·开发语言·c#
mljy.1 小时前
Linux《进程概念(下)》
linux
钢铁男儿1 小时前
C# 类的基本概念(从类的内部访问成员和从类的外部访问成员)
java·数据库·c#
陌上花开缓缓归以2 小时前
linux netlink实现用户态和内核态数据交互
linux·单片机
deepdata_cn2 小时前
开源分布式数据库(TiDB)
数据库·分布式