Получить время выполнения sql script в oracle sqlplus
У меня есть script, который я использую для загрузки моих данных в мои таблицы в Oracle (по списку операторов вставки). Как я могу получить время выполнения всего процесса загрузки? Я пробовал с set timing on
, но это дает мне продолжительность для каждого оператора insert, а не всего процесса. script показан ниже:
spo load.log
prompt '**** load data ****'
set termout off
@@inserts.sql
commit;
set termout on
prompt '**** done ****'
spo off
exit;
Ответы
Ответ 1
Попробуйте это, добавьте следующее в начале и помните текущее время:
set serveroutput on
variable n number
exec :n := dbms_utility.get_time
Добавьте это в конец и вычисляйте прошедшее время:
exec :n := (dbms_utility.get_time - :n)/100
exec dbms_output.put_line(:n)
Ответ 2
Не уверен, почему все делают это настолько сложным. Просто:
SQL> set timing on
SQL> select 1 from dual;
1
----------
1
1 row selected.
Elapsed: 00:00:00.00
SQL>
Ответ 3
Старый вопрос, но я нашел простой способ измерить время работы script в sqlplus. Вам просто нужно добавить это в начале
timing start timing_name
И это в конце script
timing stop
Более подробную информацию об этой команде можно найти в руководстве пользователя и ссылке Oracle SQL * Plus®: Сбор статистики синхронизации
Ответ 4
То, что вы описываете, по сути является способом аудита выполнения script. Независимо от того, прошло ли это время или конкретные начальные и конечные времена, которые вы собираете, вы хотите правильно их зарегистрировать, чтобы убедиться, что все пошло хорошо (или нет, почему бы и нет).
Здесь шаблон, аналогичный тому, который мы используем для захвата и регистрации всей деятельности базы данных, которую мы реализуем. Мы используем его через sqlplus.exe
для всех обновлений DDL (например, CREATE TABLE
) и для вставки в установочные таблицы.
--Beginning of all SQL scripts:
set serveroutput on feedback on echo on verify on sqlblanklines on timing on define on
col time new_v v_time
col name new_v v_name
col user new_v v_user
select name, USER, to_char(sysdate, 'YYYYMMDD-HH24MISS') time from v$database;
--Creates a new log file every time the script is run, and it immediately
--obvious when it was run, which environment it ran in, and who ran it.
spool &v_time._&v_name._&v_user..log
--Run the select again so it appears in the log file itself
select name, USER, to_char(sysdate, 'YYYYMMDD-HH24MISS') time from v$database;
Поместите тело своей работы здесь.
--End of all SQL scripts:
select name, USER, to_char(sysdate, 'YYYYMMDD-HH24MISS') time from v$database;
spool off
Ответ 5
Если вы работаете в Unix, вы также можете сделать это следующим образом:
time sqlplus @inserts.sql
Он будет печатать:
real 0m9.34s
user 0m2.03s
sys 0m1.02s
Первая строка дает общее время выполнения.