Árvore de páginas

Melhorar a performance da Contabilização Offline (CTBANFS) 

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:

    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.


    Importante

    • 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"

    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ão Descrição
    610 Documento de Saída - Inclusão de Documento Itens                                                                        
    611 Rateio (Tabela SDE) - Devolução de Compras
    612 Pedido de Venda - Inclusão de Documento Itens                                                                           
    613 Documento de Saída - Inclusão de Documento Rateio Itens                                                                 
    620 Documento de Saída - Inclusão de Documento Total                                                                        
    621 Pedido de Venda - Inclusão de Documento Total                                                                           
    631 Permite a contabilização pela SL4 (Itens de Venda por Forma de Pagamento)
    678 Documento 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";


    Observaçã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.

    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.

    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.

    Importante

    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: