Essa semana vamos falar de um assunto muito legal, que apesar de ser algo trivial para consultores mais experientes, pode ser uma dor de cabeça para profissionais que estão começando: performance em loop aninhado.

Quando falamos em performance existem vários pontos que podem ser observados, desde variáveis que são usadas sem necessidade, passando por select’s planejados e escritos de qualquer forma (ex.: for all entries in em tabela vazia), falta de conhecimento em algumas técnicas que a linguagem nos oferece, até chegar nas estruturas de repetição (LOOP, DO, WHILE).

Considere, para fins didáticos, que para um dado problema nós tivemos que fazer o select abaixo (longe de ser um select planejado):

Agora observe a quantidade de registros que foram retornados para o ambiente que código está sendo escrito.

A partir dos dados recuperados vamos realizar diferentes interações e analisar a performance de cada uma das técnicas.

Full Table Scan

A primeira citaremos apenas para ter um universo maior de comparação, apesar de que hoje em dia ninguém faça esse tipo de procedimento.

Para cada uma das mil entradas na tabela it_bkpf, o programa realizará um full table scan na tabela it_bseg, que contém quase nove mil registros. Uma matemática simples e você verá que não é uma boa ideia. Observe na imagem abaixo como custou caro o processamento.

Loop… Where

O código abaixo, e o mais utilizado, tem um ganho de performance absurdo se comparado com o exemplo acima. Mas isso não se deve apenas à presença da cláusula WHERE no loop, note que estamos utilizando a chave da tabela BSEG.

Abaixo você pode ver como o tempo de processamento diminuiu bastante.

Parallel Cursor

Dentre muitas variações permitidas com os códigos apresentados, o que melhor se comporta para esse tipo de situação em que nos encontramos é o loop indexado, ou Parallel Cursor como é conhecido tecnicamente. Para utilizar essa técnica, vamos ordenar nossas tabelas por suas respectivas chaves de busca e depois descobrimos a partir de qual index está as informações que procuramos, veja abaixo:

Como você pode ver abaixo, o ganho com essa técnica é muito grande, pois o processamento diminui de forma drástica uma vez que temos os dados ordenados e o acesso foi limitado apenas a faixa que há interesse.

Para quem não sabe, o gráfico gerado para analisar a performance foi feito usando a transação SE30.

Que saber mais dicas como esta? Curta a página da Bertholdo e fique por dentro de todas as novidades.

(Visited 1.336 times, 1 visits today)