DBAtlas · 数据库运维图谱

使用 GV$ 按实例分析集群范围的等待事件(gc 等待)

OracleRAC 与 Grid

命令

-- Cluster-class waits per instance (since startup):
SELECT inst_id, event, total_waits,
       ROUND(time_waited_micro/1e6) AS time_waited_s,
       ROUND(time_waited_micro/NULLIF(total_waits,0)/1000, 2) AS avg_ms
FROM   gv$system_event
WHERE  wait_class = 'Cluster'
ORDER  BY time_waited_micro DESC
FETCH FIRST 15 ROWS ONLY;

-- Sessions waiting right now, by instance and event:
SELECT inst_id, event, COUNT(*) AS sessions
FROM   gv$session
WHERE  wait_class <> 'Idle' AND state = 'WAITING'
GROUP  BY inst_id, event
ORDER  BY sessions DESC;

-- ASH for the last 15 minutes: which instance is waiting on gc
SELECT inst_id, event, COUNT(*) AS samples
FROM   gv$active_session_history
WHERE  sample_time > SYSTIMESTAMP - INTERVAL '15' MINUTE
  AND  wait_class = 'Cluster'
GROUP  BY inst_id, event
ORDER  BY samples DESC
FETCH FIRST 10 ROWS ONLY;

作用

使用 GV$ 视图在一个查询中显示所有实例的 Cluster 类等待(gc cr/current block 2-way/3-way、gc buffer busy、gc cr request)及其平均延迟。

适用场景

用户反映 RAC 变慢时,用于判断问题是否来自私有互联/全局缓存,以及集中在哪个实例上。

注意

gv$active_session_history 需要 Diagnostics Pack 许可。如果 avg_ms 超过几毫秒,先检查私有互联(MTU、丢包、netstat -s)和 LMS CPU;gc buffer busy 通常指向应用热块(sequence、右侧增长索引)。

在 DBAtlas 中打开 →

相关内容