SQL*Plus Feature: TIMING e o comando SET TIMING

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.

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;

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;

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;

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;

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;

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.

%name SQL*Plus Feature: TIMING e o comando SET TIMING

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).