rac 碰到 gc buffer busy

本文通过AWR报告发现并定位gcbufferbusy等待事件,详细分析了可能的原因,并通过SQL查询找出导致该问题的具体SQL语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据库版本: 10.2.0.5-64
节点数:2
操作系统版本:centos 5.6 -64

今天做awr报告发现gc buffer busy等待时间

gc buffer busy
This wait event, also known as global cache buffer busy prior to Oracle 10g, specifies the time the remote instance locally spends accessing the requested data block. This wait event is very similar to the buffer busy waits wait event in asingle-instance database and are often the result of:

1. Hot Blocks - multiple sessions may be requesting a block that is either not in buffer cache or is in an incompatible mode. Deleting some of the hot rows and re-inserting them back into the table may alleviate the problem. Most of the time the rows will be placed into a different block and reduce contention on the block. The DBA may also need to adjust the pctfree and/or pctused parameters for the table to ensure the rows are placed into a different block.

2. Inefficient Queries ˆ as with the gc cr request wait event, the more blocks requested from the buffer cache the more likelihood of a session having to wait for other sessions.Tuning queries to access fewer blocks will often result in less contention for the same block.

第一点应该基本排除:我刚刚整理完表,我们首先找到造成次问题的sql
1、首先查看上次所有的等待事件种类
SQL> select min(begin_interval_time) min, max(end_interval_time) max from dba_hist_snapshot where snap_id between 204 and 228;
SQL> select wait_class_id, wait_class, count(*) cnt
from dba_hist_active_sess_history
where snap_id between 204 and 228
group by wait_class_id, wait_class
order by 3;
结果如下:
WAIT_CLASS_ID WAIT_CLASS                            CNT
------------- ------------------------------ ----------
   4217450380 Application                             1
   1740759767 User I/O                                3
   2000153315 Network                                 7
   3875070507 Concurrency                             8
   3386400367 Commit                                 24
   4108307767 System I/O                             54
   1893977003 Other                                  66
   3871361733 Cluster                               104
                                                   3543

2、查看上次所有的等待事件
SQL> SELECT event_id, event, COUNT (*) cnt
    FROM dba_hist_active_sess_history
   WHERE snap_id BETWEEN 204 AND 228 AND wait_class_id = 3871361733
GROUP BY event_id, event
ORDER BY 3;
结果如下:                                           
  EVENT_ID EVENT                                 CNT
---------- ------------------------------ ----------
2277737081 gc current grant busy                   1
 512320954 gc cr request                           1
3897775868 gc current multi block request          4
 737661873 gc cr block 2-way                       5
 111015833 gc current block 2-way                  6
2701629120 gc current block busy                   7
1520064534 gc cr block busy                        9
1478861578 gc buffer busy                         71


3、查询造成等待事件的sql
SQL> SELECT sql_id, COUNT (*) cnt
    FROM dba_hist_active_sess_history
   WHERE snap_id BETWEEN 204 AND 228 AND event_id IN (1520064534, 1478861578)
GROUP BY sql_id
  HAVING COUNT (*) > 1
ORDER BY 2;
结果如下:
SQL_ID               CNT
------------- ----------
fuzy096ka7sca          2
9mdnmqu9vhht6          4
btb1g900q18u3          5
1y4rsrmg1m8u9          5
g42h7cxm2jsmb          8
8knuwvx47gdsz         16
bp92nqubvbpdq         40



4、查询具体的sql
SELECT *
  FROM dba_hist_sqltext d
 WHERE sql_id IN
          ('bp92nqubvbpdq',
           '8knuwvx47gdsz',
           'g42h7cxm2jsmb',
           '1y4rsrmg1m8u9',
           'btb1g900q18u3',
           '9mdnmqu9vhht6',
           'fuzy096ka7sca');

最后看到,主要是因为一个插入的sql产生的原因,下面就是和开发商量怎么解决这个问题了
### Oracle RAC 集成集群件管理 #### 配置方面 Oracle Real Application Clusters (RAC) 与 Clusterware 的集成涉及多个层面的配置工作。Clusterware 负责管理和协调整个集群中的硬件和操作系统资源,而 RAC 则专注于数据库级别的高可用性和性能优化。 为了确保两者之良好的协作,在安装过程中需要特别注意以下几点: - **网络设置**:确保所有节点的私网连接稳定可靠,这对于防止脑裂现象至关重要[^1]。 - **共享存储配置**:采用支持多路径访问的SAN或NAS设备作为数据文件存放位置;同时合理规划ASM磁盘组结构以提高I/O效率[^2]。 ```bash # 创建ASM磁盘组示例 asmcmd mkfs -G DATA /dev/sd* ``` #### 维护操作 日常运维工作中应定期执行健康检查来预防潜在风险,并利用官方提供的辅助工具简化任务流程: - 使用 `raccheck` 工具验证当前部署架构是否遵循最佳实践指南; - 启动 `ProcWatcher` 实现对关键进程生命周期的有效跟踪; - 安装 OSWatcher Black Box 记录系统级指标变化趋势以便事后分析; - 运行 ORATOP 获取近似实时的工作负载统计信息用于容量规划[^3]。 ```sql -- 查询最近一次GC buffer busy等待事件详情 SELECT * FROM v$waitstat WHERE snap_id=(SELECT MAX(snap_id) FROM dba_hist_snapshot); ``` #### 故障排除技巧 当遇到突发状况时,快速定位问题是恢复业务连续性的前提条件之一。针对不同类型的问题采取相应的排查策略能够显著提升工作效率: - 若发现某个成员意外离线,则需确认其是否已被成功驱逐以及具体原因是什么(如心跳丢失)。此时可借助日志文件深入探究根本诱因所在[^4]。 - 对于应用层面上报错的情况,除了常规SQL语句调优外还应注意是否存在跨节点争用锁资源的现象影响整体吞吐量表现。 #### 最佳实践经验分享 最后给出几条有助于构建稳健可靠的Oracle RAC环境建议: - 建立健全变更管理制度,任何改动前务必经过充分测试论证; - 关键时段安排专人值守监控平台及时响应各类预警提示; - 积极参与社区交流学习同行优秀案例积累实战经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值