Подтвердить что ты не робот

Время выполнения запроса Oracle

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

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

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

4b9b3361

Ответ 1

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

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

Наконец, можно проследить сеанс SQLPlus и вручную рассчитать время ожидания ожидающих событий, ожидающих клиента, таких как "сообщение SQLNet клиенту", "сообщение SQL * Net от клиента".

Ответ 2

Использование:

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;

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

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

Ссылка:

Ответ 3

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;

Ответ 4

Я бы рекомендовал смотреть на последовательные get/logical reads как лучший прокси для "работы", чем время выполнения. Время выполнения может быть искажено тем, что еще происходит на сервере базы данных, сколько материала находится в кеше и т.д.

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