как рассчитать время выбора оракула - PullRequest
4 голосов
/ 17 ноября 2010

Каков наилучший способ узнать, сколько времени занимает оператор выбора оракула? У меня есть следующий запрос, для которого я хочу узнать время, однако, поскольку этот запрос приносит четыре тысячи записей, и для отображения этих четырех тысяч записей на экране требуется время, указанное истекшее время может быть неправильным.

Есть ли способ, которым я могу обернуть это в курсор, а затем запустить его из sql plus, чтобы я получил правильное время, необходимое для выполнения этого?

SELECT a.code, NVL(a.org, ' '), NVL(a.office_number, ' '), SUBSTR(a.code, 0, 2) 
FROM PARTICIPANT a WHERE a.type_code = 'PRIME';

Ответы [ 5 ]

5 голосов
/ 18 ноября 2010

В SQL * Plus вы также можете использовать простой параметр TIMING:

SQL> SET TIMING ON
SQL> SELECT bla FROM bla...
...
Elapsed: 00:00:00:01
SQL> SELECT bar FROM foo...
...
Elapsed: 00:00:23:41
SQL> SET TIMING OFF

Это сообщит информацию о времени для каждого оператора в отдельности.

Другой вариант - настроить отдельные таймеры:

SQL> TIMING START mytimer
SQL> ... run all my scripts ...
SQL> TIMING STOP
timinig for: mytimer
Elapsed: 00:00:08.32

Вы можете даже вкладывать эти отдельные таймеры - TIMING STOP выталкивает самый последний таймер из стека.

4 голосов
/ 17 ноября 2010

Есть несколько способов, которые я могу придумать.

Обычно я делаю такие вещи, запуская их в таблицу с CREATE TABLE AS SELECT...., что означает, что я часто засоряю свою схему многими таблицами с именем MIKE_TEMP_1.

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

3 голосов
/ 17 ноября 2010

Опции, которые приходят на ум:

а) использовать внешний выбор, который может быть не совсем точным, если оптимизатор его искажает, но может дать хорошую идею:

SELECT COUNT(*) from (
    SELECT a.code, NVL(a.org, ' '), NVL(a.office_number, ' '), SUBSTR(a.code, 0, 2) 
    FROM PARTICIPANT a WHERE a.type_code = 'PRIME'
);

b) поместите его в скрипт, запустите его из командной строки и перенаправьте вывод в файл.

в) включить катушку и отключить (не уверен насчет этого).

d) set autotrace traceonly (что @MikeyByCrikey победил меня).

1 голос
/ 18 ноября 2010

Вы можете перейти к V $ SQL, где у вас есть следующие столбцы:

APPLICATION_WAIT_TIME
CONCURRENCY_WAIT_TIME
CLUSTER_WAIT_TIME
USER_IO_WAIT_TIME
PLSQL_EXEC_TIME
CPU_TIME
ELAPSED_TIME

но они являются совокупностью для всех выполнений этого SQL. Вы можете сделать снимок до / после и выяснить разницу, если никто другой не запускает SQL.

0 голосов
/ 27 декабря 2013

Только не отображать результаты запроса

SET TERMOUT OFF
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...