Время выполнения запроса Oracle - PullRequest
28 голосов
/ 24 августа 2010

Я хотел бы получить время выполнения запроса в Oracle.Я не хочу, чтобы Oracle печатал результаты - просто время выполнения.

В MySQL легко получить время выполнения из оболочки.

Как я могу это сделатьв SQL * Plus ?

Ответы [ 4 ]

25 голосов
/ 24 августа 2010

Можно ввести команду SQL * Plus SET TIMING ON, чтобы получить время настенных часов, но нельзя, например, извлечь время из этого тривиально.

Настройка AUTOTRACE, когда используетсяSET AUTOTRACE TRACEONLY будет подавлять вывод, но по-прежнему будет выполнять всю работу для удовлетворения запроса и отправлять результаты обратно в SQL * Plus, который будет подавлять его.

Наконец, можно отследить сеанс SQL * Plus.и вручную вычислите время, затраченное на ожидание событий, ожидающих клиента, таких как «SQL * Net message to client», «SQL * Net message from client».

18 голосов
/ 24 августа 2010

Используйте:

set serveroutput on
variable n number
exec :n := dbms_utility.get_time;
select ......
exec dbms_output.put_line( (dbms_utility.get_time-:n)/100) || ' seconds....' );

Или, возможно:

SET TIMING ON;

-- do stuff

SET TIMING OFF;

..., чтобы получить сотые доли секунды.

В любом случае время истекломожет зависеть от нагрузки на сервер и т. д.

Ссылка:

7 голосов
/ 04 апреля 2013
select LAST_LOAD_TIME, ELAPSED_TIME, MODULE, SQL_TEXT elapsed from v$sql
  order by LAST_LOAD_TIME desc

Более сложный пример (не забудьте удалить или заменить PATTERN):

select * from (
  select LAST_LOAD_TIME, to_char(ELAPSED_TIME/1000, '999,999,999.000') || ' ms' as TIME,
         MODULE, SQL_TEXT from SYS."V_\$SQL"
    where SQL_TEXT like '%PATTERN%'
    order by LAST_LOAD_TIME desc
  ) where ROWNUM <= 5;
3 голосов
/ 25 августа 2010

Я бы порекомендовал рассматривать согласованные чтения / логические чтения как лучший прокси для «работы», чем время выполнения.Время выполнения может быть искажено тем, что еще происходит на сервере базы данных, количеством содержимого в кэше и т. Д.

Но если вы действительно хотите время выполнения SQL, представление V $ SQL имеет как CPU_TIME, так и ELAPSED_TIME.

...