DBAtlas · Atlas d'exploitation des bases de données

Analyser les événements d'attente à l'échelle du cluster (gc waits) par instance avec GV$

OracleRAC et Grid

Commande

-- 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;

Ce que fait la commande

Utilise les vues GV$ pour afficher en une seule requête les attentes de classe Cluster (gc cr/current block 2-way/3-way, gc buffer busy, gc cr request) et leur latence moyenne sur toutes les instances.

Quand l'utiliser

Lorsque des utilisateurs signalent une lenteur sur RAC, pour déterminer si le problème vient de l'interconnect/du global cache et sur quelle instance il se concentre.

Attention

gv$active_session_history exige la licence Diagnostics Pack. Si avg_ms dépasse quelques ms, vérifiez d'abord l'interconnect (MTU, perte de paquets, netstat -s) et le CPU de LMS ; gc buffer busy indique généralement un hot block applicatif (séquence, index croissant à droite).

Ouvrir dans DBAtlas →

Voir aussi