Я бы пошел с
DBMS_SESSION.SESSION_TRACE_ENABLE (waits => true);
На сервере базы данных вы получите сгенерированный файл (в каталоге, указанном user_dump_dest
в параметре v $), который будет содержать трассировку.
Запустите эту трассировку с помощью утилиты tkprof
(утилита базы данных на сервере БД), и она выдаст вам все SQL-запросы, сколько раз они были выполнены, сколько времени они потратили и сколько времени было потрачено. на.
Недостаток v $ sql (или gv $ sql для RAC) состоит в том, что (1) некоторые запросы могут быть устаревшими, особенно для длительного процесса, и (2) потенциальное «вмешательство» в другие сеансы, если вы не т эксклюзивный доступ к БД.
Если вы не хотите возиться с файлами, из v $ session вы также можете перейти к v $ sessstat и v $ session_event, которые могут предложить некоторые полезные лакомые кусочки.
select event, sum(round(time_waited/(100*60),2)) time_mins, wait_class
from v$session_event
where sid in (221)
group by event, wait_class
order by 2 desc;
select sid, name, value from v$sesstat s
join v$statname n on n.statistic# = s.statistic#
where s.sid in (221)
and name in ('consistent gets','sorts (rows)','execute count',
'parse count (total)','user calls','user commits','user rollbacks'
order by value desc;