Анализ ожиданий уровня кластера (gc waits) по экземплярам через GV$
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 — чтобы понять, связана ли проблема с interconnect/global cache и на каком экземпляре она сосредоточена.
Внимание
gv$active_session_history требует лицензии Diagnostics Pack. Если avg_ms выше нескольких ms, сначала проверьте interconnect (MTU, потери пакетов, netstat -s) и CPU процессов LMS; gc buffer busy обычно указывает на горячий блок приложения (sequence, правосторонний индекс).
Связанные материалы
- Проверить состояние базы данных, экземпляров и сервисов RAC через srvctl
- Остановить / запустить базу данных RAC или отдельный экземпляр через srvctl (rolling)
- Добавить сервис RAC с preferred/available-экземплярами (включая Application Continuity)
- Перенести сервис RAC на другой экземпляр
- Проверить состояние ресурсов кластера (crsctl stat res -t)
- Проверить работоспособность стека кластера, список узлов и версию Clusterware