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)とその平均レイテンシを全インスタンスについて1つのクエリで表示する。
使用する場面
RACでユーザーから遅延が報告されたときに、問題がインターコネクト/グローバルキャッシュに起因するか、どのインスタンスに集中しているかを判別するため。
注意
gv$active_session_historyにはDiagnostics Packライセンスが必要。avg_msが数msを超える場合、まずインターコネクト(MTU、パケット損失、netstat -s)とLMSのCPUを確認する。gc buffer busyは通常アプリケーションのホットブロック(順序、右肩上がりインデックス)を示す。