TMACUL

LINGUAGEM SPEL (Continuação) - 28/09/2015 - CA Service Desk Manager (Brasil)

Blog Post created by TMACUL Champion on Jan 1, 2016

Por padrão qualquer método SPEL que seja invocado tem um limite máximo de 200000 instruções que podem ser processadas. Quando esse valor é ultrapassado, ocorrerá o erro "ilimit exceeded" e o método será abortado.

Para resolver esse problema, o mais fácil é redefinir esse limite através da função "void set_ilimit(int value)" que pode ser declarada em qualquer parte do código. Mas será que é a melhor alternativa?

 

Este mecanismo de limite de execução foi criado pela CA exatamente para prevenir que um método problemático comprometa a performance dos processos spelsrvr.exe e webengine.exe, responsáveis pela interpretação da linguagem SPEL.

 

As vezes realmente é necessário utilizar a função set_ilimit devido a necessidade de processamento em larga escala utilizando a linguagem. Rotinas batch são um exemplo bem familiar desta necessidade.

 

Mas na maioria das vezes, o ideal é a revisão do código a fim de identificar possíveis vilões no processamento do método.

Dentre as principais causas de ônus no processamento, destaco abaixo:

 

1) Instanciar objetos de forma desnecessária.

Instanciar é custoso para qualquer linguagem orientada a objetos. Ao invés disso, existem alternativas que vão desde a utilização da função "expand" ou até mesmo métodos mais performáticos quando se quer consultar atributos de um objeto de forma rápida. O método "val_by_key" utilizado através da função "send_wait" é uma ótima opção. Caso seja realmente necessário instanciar um objeto para consultar vários atributos, utilize o método "get_attr_vals" ao invés de várias linhas chamando o método "get_val".

 

2) Execução de rotinas recursivas.

Quem já trabalhou com o objeto "bmhier", sabe do que eu estou falando. Rotinas recursivas ás vezes são a única saída para vasculhar informações que estão distribuídas em milhares de registros relacionados entre si. Aqui não tem receita de bolo. É necessário muita atenção ao desenvolver rotinas para esta finalidade. Um erro muito comum é declarar variáveis dentro de enlaces de repetição (for, while, etc). Mas existem dezenas de outras causas...

 

3) Select's encadeados desnecessários.

Não esqueça que programar em SPEL significa programar em alto nível, por se tratar de uma linguagem orientada a objetos. Quem só conhece INNER_JOINS de SQL pode ter uma certa dificuldade ao utilizar a função "sync_fetch". Um bom "sync_fetch" com uma boa cláusula pode diminuir significativamente o processamento gerado.

Imagine criar uma lista de todos os analistas ativos que trabalham no departamento XYZ. Além de ser bem semântica, a cláusula where mais performática deveria ser parecida com "delete_flag=0 and type.sym='Analista' and dept.name='XYZ'" ao invés de ter que descobrir previamente o id dos tipos de contato e o id dos departamentos. Se possível, evite os LIKE's nas comparações, principalmente em atributos que não são indexados.

Outro fator importante é a utilização correta do DOMSET do objeto de acordo com a necessidade da consulta. Se você nem sabe o que é isso, te aconselho a ler a respeito ou esclarecer suas dúvidas aqui.

 

Vou deixar pra escrever mais em breve porque esse assunto é enorme.

Até a próxima.

 

Publicado Originalmente: 28 de setembro de 2015 às 15:31

Em: CA SDM Brasil - facebook

Por: daniel-bighelini

Outcomes