DBAtlas · Атлас эксплуатации баз данных

Топ wait events и топ SQL из ASH за последние минуты

OracleПроизводительность

Команда

-- 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.sql

Что делает

По выборкам Active Session History показывает в процентах, какие wait events и какие SQL-операторы потребили DB time за последние минуты; позволяет диагностировать инцидент, не дожидаясь снимка AWR.

Когда использовать

Во время текущего замедления, для кратковременных всплесков, которые теряются в средних значениях AWR, и чтобы увидеть, чего ожидала конкретная сессия или SQL.

Внимание

Запросы к V$ACTIVE_SESSION_HISTORY и DBA_HIST_ACTIVE_SESS_HISTORY требуют лицензии Diagnostics Pack. ASH основан на выборках: число выборок оценивает время, а не является точным измерением, и очень короткие SQL могут не попасть в выборку. Буфер ASH в памяти на нагруженных системах хранит данные лишь за несколько часов.

Открыть в DBAtlas →

Связанные материалы