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