Principais wait events e principais SQL do ASH nos últimos minutos
OracleDesempenhoComando
-- Last 30 min: wait event breakdown (each sample ~1 s of active session time)
SELECT NVL(event, 'ON CPU') AS event, wait_class,
COUNT(*) AS samples,
ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100, 1) AS pct
FROM v$active_session_history
WHERE sample_time > SYSTIMESTAMP - INTERVAL '30' MINUTE
GROUP BY NVL(event, 'ON CPU'), wait_class
ORDER BY samples DESC
FETCH FIRST 10 ROWS ONLY;
-- Last 30 min: top SQL (with CPU / User I/O breakdown)
SELECT sql_id, sql_opname,
COUNT(*) AS samples,
SUM(CASE WHEN session_state = 'ON CPU' THEN 1 ELSE 0 END) AS cpu,
SUM(CASE WHEN wait_class = 'User I/O' THEN 1 ELSE 0 END) AS user_io,
ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100, 1) AS pct
FROM v$active_session_history
WHERE sample_time > SYSTIMESTAMP - INTERVAL '30' MINUTE
AND sql_id IS NOT NULL
GROUP BY sql_id, sql_opname
ORDER BY samples DESC
FETCH FIRST 10 ROWS ONLY;
-- Older periods: DBA_HIST_ACTIVE_SESS_HISTORY (one sample every 10 s; COUNT(*)*10 = seconds)
-- Ready-made ASH report (last 30 min):
SET LINESIZE 8000 PAGESIZE 0 TRIMSPOOL ON HEADING OFF FEEDBACK OFF
SELECT output
FROM TABLE(DBMS_WORKLOAD_REPOSITORY.ASH_REPORT_TEXT(
l_dbid => (SELECT dbid FROM v$database),
l_inst_num => (SELECT instance_number FROM v$instance),
l_btime => SYSDATE - 30/1440,
l_etime => SYSDATE));
-- Interactive: @?/rdbms/admin/ashrpt.sqlO que faz
Usa as amostras do Active Session History para mostrar, em percentuais, quais wait events e quais comandos SQL consumiram DB time nos últimos minutos; diagnostica o incidente sem esperar um snapshot do AWR.
Quando usar
Durante uma lentidão ao vivo, para picos curtos que somem nas médias do AWR e para ver o que uma sessão ou SQL específico estava esperando.
Atenção
Consultar V$ACTIVE_SESSION_HISTORY e DBA_HIST_ACTIVE_SESS_HISTORY exige a licença do Diagnostics Pack. O ASH é amostrado: as contagens de amostras estimam tempo, não são medições exatas, e SQL muito curtos podem não aparecer. O buffer do ASH em memória guarda apenas algumas horas em sistemas movimentados.
Relacionados
- Tirar um snapshot do AWR e gerar um relatório AWR entre dois snapshots
- Relatório AWR diff (compare period) entre dois períodos
- Executar uma análise ADDM e obter seu relatório
- Obter um relatório do SQL Monitor (SQL longo em execução ou concluído)
- Habilitar/desabilitar o trace 10046 de uma sessão e resumir com TKPROF
- Mostrar o plano de execução real com estatísticas de row source (ALLSTATS LAST)