CONTEÚDO
- Visão Geral
- Identificação
- Fluxograma
- Possíveis Soluções
- Changequery;
- FWPreparedStatement;
- Changequery;
- Gráfico
01. Visão Geral
Estudo para propor uma melhoria na performance da rotina de Apuração de resultado(CTBA211).
02.Identificação
Analisando o log de um dos nossos clientes, identificamos que ocorre lentidão no processo de Apuração de Resultados, devido à quantidade de chamadas da função changequery desde a função SALDOCQ.
Na Apuração de Resultados a função changequery é chamada para gravar:
- o arquivo temporário
- cada tipo de moeda
- o tipo de saldo
- as contas contábeis
03. Fluxograma
IMPORTANTE
- A função SALDOCT(X) chama a função SALDOCQ (CTBXSALA).
- Se a apuração for por movimento será chamado a SALDOCT duas vezes, saldo anterior e saldo atual.
04. Possíveis Soluções
a. Troca da função Changequery
Retirar a função changequery, realizando tratamento na montagem da query para utilizar o comando específico para cada banco (SQL, Oracle, Postgres, DB2). Assim executará a query diretamente.
Os comando que devem ser utilizados são:
- Informex e Oraacle = NVL
- Postgres e DB2 = COALESCE
- SQL = ISNULL
b. Uso da função FWPreparedStatement
A função FWPreparedStatement representa um comando SQL pré compilado.
Para utilizá-lo é necessário alterar todas as chamadas das origens SALDOCT(X) assim passaria a query correta e destruiria apos o fim da utilização da origem.
Importante
Em testes, alterando os parâmetros na montagem da query e chamando o FWPreparedStatement, funciona porém não da maneira correta, já que ao chamar a função SALDOCQ está criando a query e destruindo-a, o que não constitui a melhor prática.
Como utilizar - FWPreparedStatement
05. Gráfico
Segue a baixo gráfico em segundos para as possíveis soluções.
*Log tirado em uma base local com 29.607 registro de lançamento contábil.