Я хотел бы получить время выполнения запроса в 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.