Á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
MÉTODO 3 →Contabilização

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.


Image Removed




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

MÉTODO 4 →Revisão nas sequencias de contabilização

Um fator que diminui a performance da rotina CTBANFS e a alta quantidade de "Sequencias (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.

Pode lhe interessar:

Caso deseje executar o trace de rastreamento para a rotina CTBANFS, recomendo a leitura da página abaixo:

http://tdn.totvs.com/pages/viewpage.action?pageId=243638663


O parâmetro MV_CTBCATH é amplamente utilizado para otimizar as rotinas de contabilidade, por isso recomendo a leitura da página abaixo:

http://tdn.totvs.com/pages/releaseview.action?pageId=6068392

Criação de campos adicional na tabela CT5 para que seja replicado o conteúdo nas tabelas CT2 e CTK

https://centraldeatendimento.totvs.com/hc/pt-br/articles/360043003714-MP-SIGACTB-CTBA105-Alimentar-campos-adicionais-na-tabela-CT2-atrav%C3%A9s-das-Integra%C3%A7%C3%B5es-Cont%C3%A1beis