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

相关推荐
weelinking3 小时前
【产品】12_接入数据库——让数据永久保存
jvm·数据库·python·react.js·数据挖掘·前端框架·产品经理
稳联技术老娜3 小时前
DeviceNet主站怎么连接西门子PLC,Profinet网关配置手册(那智机器人)
服务器·网络·数据库
9分钟带帽4 小时前
linux_系统开机自动执行shell脚本
linux·服务器
这个DBA有点耶4 小时前
云上运维新挑战:当数据库不再“看得见摸得着”
数据库·sql·程序人生·云原生·运维开发·学习方法·dba
AskHarries5 小时前
系统提示词、开发者指令和用户输入的优先级
java·前端·数据库
消失在人海中5 小时前
oracle 数据库多表关联查询
服务器·数据库·oracle
九皇叔叔5 小时前
PostgreSQL/openGauss pg_stats 视图从入门到精通:统计信息、执行计划与慢 SQL 优化实战
数据库·sql·postgresql
嵌入式小能手6 小时前
飞凌嵌入式ElfBoard-进程间的通信之命名管道
linux·服务器·算法
AOwhisky6 小时前
Ceph系列第六期:Ceph 文件系统(CephFS)精讲
linux·运维·网络·笔记·ceph
南极企鹅6 小时前
MySQL间隙锁&临键锁
数据库·sql·mysql