Я хотел бы получить время выполнения запроса в Oracle. Я не хочу, чтобы Oracle требовала распечатать результаты - просто время выполнения.
В MySQL легко получить время выполнения из оболочки.
Как это сделать в SQL * Plus?
Я хотел бы получить время выполнения запроса в Oracle. Я не хочу, чтобы Oracle требовала распечатать результаты - просто время выполнения.
В MySQL легко получить время выполнения из оболочки.
Как это сделать в SQL * Plus?
Можно выполнить команду SQL * Plus SET TIMING ON
, чтобы получить время настенных часов, но нельзя взять, например, время извлечения из этого тривиально.
Параметр AUTOTRACE, когда используется как SET AUTOTRACE TRACEONLY
, будет подавлять вывод, но все равно выполняет всю работу для удовлетворения запроса и отправляет результаты обратно в SQL * Plus, что будет подавлять его.
Наконец, можно проследить сеанс SQLPlus и вручную рассчитать время ожидания ожидающих событий, ожидающих клиента, таких как "сообщение SQLNet клиенту", "сообщение SQL * Net от клиента".
Использование:
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;
..., чтобы получить сотые секунды, которые истекли.
В любом случае на прошедшее время может влиять загрузка сервера и т.д.
Ссылка:
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;
Я бы рекомендовал смотреть на последовательные get/logical reads как лучший прокси для "работы", чем время выполнения. Время выполнения может быть искажено тем, что еще происходит на сервере базы данных, сколько материала находится в кеше и т.д.
Но если вы действительно хотите выполнить время выполнения SQL, представление V $SQL имеет как CPU_TIME, так и ELAPSED_TIME.