Dentro do sqlplus é muito utilizado uma feature para calcular o tempo decorrido por uma query ou um bloco PL/SQL.
A feature(caracteristica) do SQL*Plus é o SET TIMING.
01 02 03 04 05 06 07 08 09 10 11 | SQL> set timing on SQL> drop table t purge; Table dropped. Elapsed: 00:00:00.09 SQL> create table t as select * from dba_objects; Table created. Elapsed: 00:00:00.14 |
O tempo decorrido para resultar o comando de drop foi de 0.09s e 0.14s para criar a tabela.
E se quizessemos coletar o tempo de multiplos grupos de comandos, há como?
Sim, o comando TIMING serve para este tipo de situação.
TIMING:
Uma das coisas que normalmente é esquecido ao longo do tempo decorrido é propriamente dito o tempo total.
Ele pode ser usado para coletar dados para fazer uma análise de desempenho em quaisquer comandos ou blocos executados durante o período.
Ele registra dados de tempo por um período de tempo decorrido, lista o nome do temporizador atual e dados de tempo, ou lista o número de temporizadores ativos.
Sintaxe:
TIMI[NG] [START text | SHOW | STOP]
Opções
- START text: Define-se um temporizador e torna o texto o nome do temporizador. Você pode ter mais de um temporizador activo iniciando temporizadores adicionais antes de parar o primeiro; SQL*Plus aninha cada temporizador novo dentro do anterior. O temporizador mais recentemente começou a se tornar o timer atual.
- SHOW: Lista o nome do temporazidor atual e dados de tempo.
- STOP: Lista o nome do temporizador atual e dados de tempo, em seguida, exclui o temporizador. Se quaisquer outros timers são ativos, o próximo timer iniciado mais recentemente torna-se o timer atual.
- TIMING: sem cláusulas para listar o número de temporizadores ativos.
- CLEAR TIMING: remove todos os temporizadores.
Exemplo:
Ligarei o temporizador de tempo para qualquer operação e mostrarei que não tenho nenhum temporizador nomeado na minha sessão;
1 2 3 4 5 | SQL> set timing on SQL> timing no timing elements in use SQL> timing show SP2-0325: no timing elements to show |
Irei criar um temporizador total para mostrar no final do processo to tempo total decorrido;
Em seguida um temporizador para tempo de criação da tabela, e ao terminar devo parar este;
01 02 03 04 05 06 07 08 09 10 | SQL> timing start tempo_total SQL> timing start tempo_create SQL> create table t as select * from dba_objects; Table created. Elapsed: 00:00:00.19 SQL> timing stop timing for : tempo_create Elapsed: 00:00:00.19 |
Criarei um temporizador para minhas consultas na tabela;
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 | SQL> timing start tempo_query SQL> select count (1) from t; COUNT (1) ---------- 17586 Elapsed: 00:00:00.04 SQL> select count (1) from t where object_type = 'TABLE' ; COUNT (1) ---------- 1915 Elapsed: 00:00:00.00 SQL> TIMING STOP timing for : tempo_query Elapsed: 00:00:00.04 |
Criarei um temporizador para o meu comando de drop table;
1 2 3 4 5 6 7 8 9 | SQL> timing start tempo_drop SQL> drop table t purge; Table dropped. Elapsed: 00:00:00.07 SQL> timing show timing for : tempo_drop Elapsed: 00:00:00.07 |
E agora mostro o tempo do drop (pois não fiz o stop no processo anterior) e tempo total decorrido em todo o processo efetuando a limpeza dos temporizadores na minha sessão;
1 2 3 4 5 | SQL> clear timing timing for : tempo_drop Elapsed: 00:00:00.07 timing for : tempo_total Elapsed: 00:00:00.30 |
Assim agora seus relatórios podem conter informações do tempo decorrido de suas operações e do seu tempo total.

Autor: Rafael Stoever
Bacharel em Sistema de Informação pela Uniasselvi, atualmente cursando Gerenciamento de Projetos em TI pela Pós Graduação Uniasselvi. Atuo como Analista de suporte a banco de dados – DBA pela Lumina Serviços em TI residente de Blumenau/ SC, OPN Certified Specialist, Certificado OCP 10g/11g/12c, OCE RAC10g e Linux 10g. Conhecimentos em Microsoft SqlSever, Mysql e programação web (php,asp).
One thought on “SQL*Plus Feature: TIMING e o comando SET TIMING”