Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Produto:

Microsiga Protheus®

Ocorrência:

Baixa performance na rotina de contabilização off-line dos documentos de saída (CTBANFS)

Ambiente:Faturamento (SIGAFAT)

Passo a passo:

Deck of Cards
startHiddenfalse
effectDuration0.5
idOCORRÊNCIAS
effectTypehorizontal
loopCardstrue
Card
defaulttrue
id0. Instruções para a resolução
labelMV_CNFSTHR

O parâmetro MV_CNFSTHR habilita a contabilização Off-Line utilizando Múltiplas Threads para acelerar o processamento.

Abaixo descrevo um comparativo entre o processamento padrão da rotina CTBANFS e o processamento com múltiplas threads.


SEM utilizar o parâmetro MV_CNFSTHR

Neste exemplo é utilizado um conjunto de 100 notas de saída para processamento da contabilização, veja abaixo que o processo padrão executa nota-a-nota não utilizando de forma exponencial todo percentual de processamento dos servidores:

 









COM a utilização do parâmetro MV_CNFSTHR

Neste exemplo é utilizado um conjunto de 100 notas de saída para processamento da contabilização e ativamos o parâmetro MV_CNFSTHR = 3, veja que o tempo de processamento é reduzido devido a execução em paralelo das notas de saída:

*Thread é um pequeno programa que trabalha como um subsistema independente de um programa maior, executando alguma tarefa específica. Um programa dividido em várias threads é processado mais rapidamente do que um programa monolítico, pois várias tarefas podem ser executadas simultaneamente, compartilhando os recursos do sistema.


Aviso
titleImportante
  • O numero máximo de threads para o parâmetro MV_CNFSTHR e 30, porem recomendamos testes com valores menores para acompanhar o ganho de performance;
  • Pergunta (Mostra Lançamento Contábil?) deve estar configurada com o conteúdo igual a "NÃO";
  • Pergunta (Aglutina Lançamentos?) deve estar configurada com o conteúdo igual a "NÃO";
  • O parâmetro MV_PRELAN deve esta configurado com o conteúdo igual a "D"
Card
defaulttrue
id060720201
labelMV_OPTNFS

O parâmetro MV_OPTNFS muda o comportamento de processamento da rotina CTBANFS, pois na montagem da massa de dados para processamento ao invés de ler registro-a-registro a rotina monta uma query (Select) no banco de dados recuperando todos os registros a serem processados (CURSOR).
Em testes em clientes verificamos um ganho de aproximadamente 30% no processamento da rotina.

Importante: Com a mudança do parâmetro é necessária uma revisão geral das LP's.

Passo-a-passo

1. Alterar o parâmetro MV_OPTNFS para o conteúdo igual a .T. (Verdadeiro);

2. Realizar uma revisão das LP's abaixo trocando o alias das tabelas pelo nome do cursos "CTBANFS":

Lista de LP's disponíveis na rotina CTBANFS

Lanc. PadrãoDescrição
610Documento de Saída - Inclusão de Documento Itens                                                                        
611Rateio (Tabela SDE) - Devolução de Compras
612Pedido de Venda - Inclusão de Documento Itens                                                                           
613Documento de Saída - Inclusão de Documento Rateio Itens                                                                 
620Documento de Saída - Inclusão de Documento Total                                                                        
621Pedido de Venda - Inclusão de Documento Total                                                                           
631Permite a contabilização pela SL4 (Itens de Venda por Forma de Pagamento)
678Documento de Saída - Custo de Mercadoria Vendida                                                                        


Exemplo da troca do alias das tabelas:

  • No exemplo vou utilizar o principal lançamento padrão da rotina CTBANFS (610);
  • No modo PADRÃO (MV_OPTNFS = .F.) quando incluímos as LP's informamos nos campos macro-executados o apelido das tabelas utilizadas, por exemplo "SD2->";
  • No modo performático (MV_OPTNFS = .T.) devemos obrigatoriamente ajustar as LP's alterando os campos macro-executados para o novo apelido "CTBANFS";


Dica
titleObservação
  • Deve-se obrigatoriamente ajustar o apelido de todos os campos macro-executados das abas Valores, Histórico e Outros para as tabelas SC5, SC6, SB1, SA1, SA2, SF2, SD2 e SF4;
  • Você pode utilizar este mecanismo de performance em conjunto com o parâmetro MV_CNFSTHR (Múltiplas Threads);
  • Se os Lançamentos Padrões Offline foram definidos para tratar o apelido “CTBANFS” os mesmos não poderão ser utilizados em um processo de contabilização Online.
Card
defaulttrue
id0. Instruções para a resolução
labelPeríodo contabilizado

Contabilização por Período / Documento / Dia, qual o mais performático?

Na parametrização da contabilização off-line da Nota Fiscal de Saída temos três tipos de parametrização “Por Documento”, “Por período” e “Por Dia”.
Identificamos que o tipo “Por Documento” e “Por Dia” utilizam muito acesso a disco do CTREE/ADS que pode gerar uma pequena queda na performance.
Recomendamos a utilização da opção “Por Período” que possui maior desempenho no processamento de grandes volumes de contabilização.

Card
defaulttrue
id0. Instruções para a resolução
labelSequencia de Contabilização

Um fator que diminui a performance da rotina CTBANFS é a alta quantidade de "Sequências" (CT5_SEQUEN) para um mesmo lançamento padrão, por isso recomendamos que a quantidade não ultrapasse 10 sequencias.

Aviso
titleImportante

Ao executar a rotina de processamento "Contabilização Off-Line - CTBANFS" para contabilizar os movimentos Vendas o campo F2_DTLANC SEMPRE será atualizado com sua data de processamento, mesmo que não seja gerado lançamento contábil na tabela CT2. Esse procedimento é utilizado para evitar reprocessamento indevidos de movimentos já avaliados pela rotina.

Se optar pelo uso de múltiplas threads pra melhoria de performance, não poderá trabalhar com uso schedule  para contabilização. A rotina de contabilização via faturamento, CTBANFS, só funciona via schedule, caso ela não esteja configurada para utilizar múltiplas threads.

Isso ocorre pois as threads do Schedule (SIGACFG) são diferenciadas das Threads dos módulos do sistema. Então via Schedule, é considerado Threads do Agent e não de parâmetros dos demais módulos.

Dúvidas na configuração das Threads do Agent (Configurador), contate a Equipe Framework.

Pode lhe interessar: