Atenção: por essa edição ser muito antiga não há arquivo PDF para download.
Os artigos dessa edição estão disponíveis somente através do formato HTML.

Clique aqui para ler todos os artigos desta edição

Oracle: Tuning de código PL/SQL

 

Mike Ault e Eric Mortensen

 

Este artigo discute algumas otimizações valiosas para melhorar o desempenho de códigos PL/SQL que não são suficientes complexos para merecer artigos individuais. Discutiremos o uso de uma tabela DUAL alternativa, o uso de NOCOPY, o uso de Hints, e de várias outras técnicas de codificação para tornar mais eficiente à codificação PL/SQL.

 

 

Uma DUAL alternativa

            A tabela DUAL é uma pequena tabela no dicionário de dados que o Oracle ou qualquer usuário pode referenciar para garantir um resultado conhecido. Esta tabela possui apenas uma coluna, chamada DUMMY com apenas uma linha, contendo o valor X. A DUAL é criada automaticamente pelo Oracle, sob o esquema SYS, mas pode ser acessada por outros usuários.

         Sempre que precisamos verificar um resultado conhecido, como a data e hora do servidor ou o valor atual de uma sequence, simplesmente fazemos a consulta referenciando a tabela DUAL. Isto por que toda consulta SQL deve envolver uma tabela, porém, se utilizarmos qualquer tabela “povoada” nesta consulta, teremos uma série de inconvenientes, como estratégia de acesso ou eventual utilização de índices, etc. para evitar tudo isso, simplesmente utilizamos a tabela DUAL nesta consulta, veja um exemplo na Listagem 1.

 

Listagem 1. Verificando valores conhecidos através da tabela DUAL.

 

SQL> SELECT TO_CHAR(SYSDATE, ‘DD/MON/YYYY HH24:MI:SS’)

AS “Data/Hora atual” FROM DUAL; -- Data atual

Data/Hora atual

--------------------------

26/ABR/2006 21:47:23

SQL> SELECT SQLMAG_SEQ.CURRVAL FROM DUAL

--Valor atual de uma sequence

   CURRVAL

--------------------------

               3

                   

Existe um custo quando selecionamos de DUAL, mesmo quando estivermos selecionando apenas uma constante. Vejamos na Listagem 2.

 

Listagem 2.Custo da seleção da constante “l” da tabela DUAL.

 

SQL> select 1 from dual;

Elapsed:   00:00:00.01

Execution plan

--------------------------

0                     SELECT STATEMENT Optimizer=CHOOSE

1                     0    TABLE ACCESS   (FULL)   OF   ‘DUAL’

Statistics

--------------------------

                0     recursive calls

                0     db block gets

                3     consistent gets

                0     physical reads

                0     redo size

              380       bytes sent via SQL*Net to client

              499   bytes received via SQL*Net from client

                2     SQL*Net roundtrips to/from client

                0     sorts (memory)

                0     sorts (disk)

                1     rows processed

                SQL>

 

            Podemos perceber que cada seleção em DUAL tem um custo equivalente a três gets consistentes. No entanto, se fizermos muitas seleções em DUAL alternativa, que requererá somente um get consistente. A ...

Quer ler esse conteúdo completo? Tenha acesso completo