ERP - Performance/Lentidão/Travamentos - Como otimizar execução de rotinas relacionadas a movimentação de Estoques
Dúvida
Como otimizar execução de rotinas relacionadas a movimentação de Estoques no Gestão Empresarial | ERP?
Importante
Essas orientações são importantes para qualquer processo que envolva movimentações de estoque. Lembrando que o processo não otimizado de movimentação de estoque pode aumentar incidência de locks, deadlocks e trazer uma lentidão generalizada para várias rotinas do sistema.
Solução
Os casos relacionados à lentidão/travamento que condizem com as verificações indicadas nesse artigo tem como base toda e qualquer rotina que gere, atualize ou consulte informações na tabela E210MVP. Algumas das sugestões indicadas resultam em ganho de performance mais abrangente (Collation, Lock Escalation e Isolation Level), estas otimizações tem influência no sistema como um todo e portanto são indicadas independente a origem da lentidão/travamento.
1. Indicativo de Otimização de Estoque das Filiais.
Todas as filiais devem estar configuradas para utilizar a otimização de movimentos de estoques.
Se uma ou mais filiais não estiverem otimizadas, o sistema não faz a busca pelo campo E210MVP.ULTMDI. Sem a otimização (E070FES.IndOti) todos os movimentos de estoque no período são trazidos pelo select ao invés de apenas 1 registro por dia. Esse comando (não otimizado) procura por data a partir da data atual, buscando qual foi o último movimento do produto que está sendo atualizado pelo fechamento de estoques ou movimentado, essa procura é feita retornando a data base da pesquisa de 4 em 4 meses, o que torna o processo muito mais lento.
1.1. Confira a definição do parâmetro 'Indicador otimização'
1.1.1. Através da tela F070FES - Cadastros / Filiais / Parâmetros por Gestão / Estoques, verifique a definição do parâmetro 'Indicador otimização' (campo E070EST.IndOti) na aba Estoques 2. Este campo deve obrigatoriamente estar definido como 'S-Sim';
1.1.2. Para fazer a verificação via banco de dados (ideal quando a sua base de dados possui diversas empresas/filiais) utilize o comando abaixo:
SELECT CODEMP,CODFIL,INDOTI FROM E070EST ORDER BY CODEMP,CODFIL
Exemplo de retorno do Select:
Se alguma filial retornar como 'N' ou campo em branco, então é necessário que você tome ações descritas no tópico 1.2.
1.2. Efetue a ativação da otimização em Filiais que não estejam com estoque otimizado.
Importante
- O indicativo de estoque otimizado não pode ser alterado manualmente. Para ativar a otimização, é necessário executar a rotina da tela F210ISA_SECE - Suprimentos / Gestão de Estoques / Controle de Estoque / Saldos / Inicialização do controle de busca dos saldos;
- Depois que o estoque foi otimizado, não é permitida a desativação da otimização;
- A execução deste processo deve ser efetuada em horário alternativo, onde não se tenha movimentação ou quando o fluxo do processo for menor, tendo em vista que este processo pode gerar perda de performance nas demais rotinas do sistema;
- Orienta-se executar esta rotina primeiramente em ambiente de homologação, validando a janela necessária para execução do processo em ambiente de Produção.
1.2.1. Acesse a tela F210ISA_SECE - Suprimentos / Gestão de Estoques / Controle de Estoque / Saldos / Inicialização do controle de busca dos saldos;
1.2.1.1. Defina as filiais que deverão ter o estoque otimizado ou marque a opção 'Todas' e clique no botão Processar.
1.2.1.2. Repita o processo para todas as Empresas/Filiais, conforme sua necessidade. Lembrando que é possível executar o processo em uma única execução apenas para filiais da mesma empresa. Se você tem mais empresas na sua base de dados, deve executar esse processo várias vezes.
1.3. Informações adicionais sobre a rotina de Estoque Otimizado
O processo de inicialização da tela F210ISA_SECE - Suprimentos / Gestão de Estoques / Controle de Estoque / Saldos / Inicialização do controle de busca dos saldos faz com que o sistema perceba qual é o último movimento feito em um determinado dia.
Para saber disso, o sistema seta um valor para o campo E210MVP.UltMdi fazendo com que a busca dos saldos não precise buscar todos os movimentos.
Para efeito de comparação, em testes realizados numa base com mais de 8 milhões de registros na tabela E210MVP, o sistema passou a considerar apenas 1,2 milhões para a busca dos saldos, portanto deixando de buscar +- 7 milhões de registros, o que tornou a busca muito mais rápida.
Para fazer essa inicialização, inicialmente o sistema percorre toda a tabela de movimentos, pois uma vez inicializada, o próprio fechamento dos estoques se encarregará de setar este campo a cada vez que for rodado um novo processo.
Resumindo o que a rotina da tela F210ISA executa:
- Indica que a respectiva filial está trabalhando de forma otimizada (E070EST.INDOTI = 'S');
- Faz uma marcação em todos os movimentos de estoque da respectiva filial, setando apenas o último movimento do dia como S, deixando todos os outros como N. Este procedimento faz com que a busca dos saldos, executada tanto no fechamento dos estoques, como do movimento de estoque (QTDANT), consultas por data, custos, etc., saibam exatamente que movimento trazer para a estação, não precisando mais buscar um número elevadíssimo de movimentos, melhorando desta forma o tempo de resposta do processo;
- Uma vez feito a inicialização, todos os procedimentos futuros ficam a cargo do sistema, ou seja, este processo só precisa ser executado uma vez na base do cliente para cada filial.
2. Acompanhamento dos fechamentos de estoques de todas as filiais
Importante
Com relação ao período de estoques das filiais da base de dados, é importante:
- Não deixar o período em aberto na filial superior a 10 dias (aceitável entre 10 e 30 dias). Este simples procedimento tornará a busca dos saldos bem mais eficaz, pois muitos movimentos de transferência podem tornar o fechamento moroso;
- O período de estoques das origens não deve contemplar um período maior do que o período em aberto para a filial. A verificação de ambos os períodos podem ser efetuadas via tela F070FES - Cadastros / Filiais / Parâmetros por Gestão / Estoques nas abas Estoques 1 e Períodos por Origem, respectivamente;
- O período de estoque das filiais de um modo geral deve sempre manter uma faixa de igualdade, ou seja, nenhuma filial deve ficar com o período em aberto distante das demais filiais.
O período de estoques em aberto nas filiais pode ser obtido conforme orientações abaixo:
2.1. De forma agrupada, através da tela F070MPF - Cadastros / Filiais / Períodos para lançamentos;
2.2. Através do comando no banco de dados
SELECT CODFIL, ESTPDI, ESTPDF FROM E070FIL WHERE CODEMP = X
2.3. Cenário relacionado à casos de lentidão:
Neste exemplo ao rodar o fechamento de estoques da filial 1 o sistema não irá verificar apenas os movimentos compreendidos entre 01/01/2013 à 31/12/2016, mas sim o período 01/01/2010 até 31/12/2016, tendo em vista que o período da filial 2 ainda esta em aberto e podem haver transferências a serem valorizadas/revalorizadas.
2.4. Cenário correto, sem indícios de lentidão/travamento:
Neste exemplo, independentemente da filial em que for executado o fechamento/atualização de estoques, o sistema irá validar apenas o período em aberto na filial de execução tendo em vista que as demais filiais o mesmo período informado, otimizando desta forma os comandos aplicados na tabela E210MVP.
2.5. Realize o fechamento de estoques para as Filiais que estejam com períodos em aberto incorretamente. Para maiores informações, verifique o artigo ERP - Controle de Estoque/Atualização-Fechamento - Como executar as rotinas de atualização e fechamento de estoques.
2.6. Caso exista na sua base de dados alguma filial que não seja mais utilizada, então você deve seguir com as recomendações relacionadas no artigo ERP – Cadastro de Filiais – Qual o processo para inativar uma filial.
3. Verifique os identificadores de regras que podem ser utilizados para melhoria de performance nos processos relacionados aos movimentos de estoque.
3.1. Acesse o artigo ERP - Performance/Lentidão/Travamentos - Quais são os identificadores de regras que podem ser utilizados para otimização de Performance e verifique a ativação/desativação dos identificadores adequados para o seu processo.
Importante
- Em caso de utilização de banco de dados Oracle, é imprescindível que o identificador de regras EST-210ROWNU01 esteja cadastrado e ativado para todas as empresas da base de dados;
- É imprescindível que você verifique as questões relacionadas ao identificador de regras GER-000EUDLE01;
- Atente-se a revalidação de todos os identificadores de regras citados no artigo indicado acima. Vários deles podem resolver problemas relacionados a Performance de Estoques. Lembre-se de que outras rotinas do sistema podem fazer chamadas às tabelas/rotinas de Estoques.
4. Parâmetro global OtiAtuEst
Para otimizar o processo de atualização e fechamentos de estoque, você deve ativar o parâmetro global OtiAtuEst.
Importante
Clique aqui para acessar a documentação da tela de parâmetros globais, onde você poderá verificar detalhes da documentação deste parâmetro;
Quando este parâmetro está ativado, você poderá identificar mudanças em comportamentos do sistema, conforme descrito abaixo;
- Ao rodar a atualização de estoques pela tela F215FES_SECE - Suprimentos / Gestão de Estoques / Controle de Estoque / Fechamento dos Estoques, caso já tenha sido executada a atualização de estoque para o mesmo período alguma vez, a atualização não será executada novamente. Se você precisa executar o processo para um mesmo período novamente, terá que desabilitar temporariamente o parâmetro global OtiAtuEst;
- Caso você utilize processos da área de Custos do sistema, quando o parâmetro OtiAtuEst estiver habilitado e haja mudança do Preço de Custo na Derivação do produto e haja a execução do processo de atualização de estoques, não será executada a atualização para todo o período em aberto de Estoques da Filial.
4.1. Acesse a tela F000PGS - Cadastros / Identificadores e parâmetros / Parâmetros Globais;
4.2. Localize e ative o parâmetro OtiAtuEst, não esquecendo de acionar o botão Processar para alterar as configurações.
5. Ativação do Estoque Assíncrono
O Gestão Empresarial | ERP permite a geração de movimentos de estoque de forma assíncrona. Desta forma, retira-se do processo de fechamento da Nota Fiscal a geração do movimento de estoque (que é geralmente um ponto onde pode ocorrer uma lentidão em alguns momentos) e parametriza-se a geração desses movimentos em um segundo momento (geralmente fora do expediente normal de trabalho), ainda permitindo agrupamento de movimentos para alguns casos.
Em ambientes com alta volumetria de movimentos de estoques recomenda-se a ativação desta rotina. Para maiores informações sobre a rotina, clique aqui para acessar o Portal da Documentação, procure pelo termo "87 - Movimentar pendências de estoque do faturamento" e acesse a documentação da versão do sistema que você utiliza.
Importante
Não adianta você parametrizar o estoque assíncrono e colocar o processo agendado para rodar a cada 5 minutos, pois isso não retirará a carga de processamento do sistema. O ideal é que você possa executar o processamento no horário que, em geral, há menor volume de movimentações de estoque (Exemplo: de madrugada), ou então, que a execução seja realizada durante o dia, mas em horários mais espaçados.
Observação
A execução do processo automático 87 pode ainda ser personalizado através da chamada do WebService com.senior.g5.co.cad.rotinasapiens e da função de programador ExecutarRotinaSapiens. Para maiores informações sobre esses artefatos, consulte a Documentação do sistema.
6. Reservas e Reservas Exclusivas em Lote Padrão
Por padrão, ao ser efetuado um Pedido ou uma Pre-Fatura com Lote Padrão (processo que pode ser automatizado utilizando parametrizações e também identificadores de regras VEN-120LOTPA01, VEN-135LOTPA01 e VEN-135LOTPA02) o sistema irá executar uma Reserva ou Reserva Exclusiva do lote. Essa reserva é executada atualizando a tabela E210EST e a tabela E210DLS.
No entanto, por se tratar de um lote padrão (que não deve ser comercializado e atende exclusivamente processos internos do sistema), não há necessidade de ser executado o registro da reserva na tabela E210DLS, já que o saldo do estoque, para efeito de validação da existência do estoque, é realizado pelo sistema apenas até a tabela E210EST.
Portanto, para evitar o acesso a tabela E210DLS e diminuir ocorrência de locks e deadlocks nos processamentos, você pode desativar o parâmetro global LckLotPad. Para isso:
1. Acesse a tela F000PGS;
2. Localize o parâmetro de nome LckLotPad;
3. Altere o parâmetro para 'N-Não' e clique em Processar.
Atenção
- A alteração deste parâmetro exige a reinicialização de todo o ambiente do sistema e inclusive do Middleware Senior para completo efeito em processos;
- Verifique a documentação do parâmetro no Manual do Usuário para validar os efeitos colaterais que podem ocorrer por conta da ativação do mesmo.
7. Geração de Logs de Rateio (GerLogRat)
A partir das versões 5.10.3.79 e 5.10.4.19 o parâmetro global GerLogRat permite a definição se o sistema fará a geração de Logs de Rateio em qualquer rotina que acione o processo de rateio do sistema.
Esse parâmetro atual em conjunto com o parâmetro de linha de comando -log e dos Logs do Middleware, permitindo que, mesmo que o parâmetro -log e os Logs do Middleware estejam habilitados, a rotina de Logs do processo de rateio não seja ativada (quando parâmetro global GerLogRat esteja desativado).
Desta forma, para garantia de Performance das rotinas que envolvem Rateio, inclusive processos relacionados a estoques, o parâmetro global GerLogRat deve ser mantido desativado, e deve ser ativado apenas em períodos específicos.
Importante
- Os logs da rotina de rateio foram inseridos no sistema a partir das versões 5.10.2.141 e 5.10.3.50 e antes das versões 5.10.3.79 e 5.10.4.19 não era possível determinar a geração dos logs através do parâmetro global. Ou seja, utilizando parâmetro -log ou ativando os Logs do Middleware os logs da rotina de rateio seriam habilitados.
- Para maiores informações sobre ativação da rotina de logs e o impacto o Performance, verifique o tópico '6. Logs ativados que podem impactar em rotinas' do artigo ERP - Performance/Lentidão/Travamentos - Quais são as orientações gerais para otimização de Performance.
Observação
Para mais informações sobre o questões relacionadas a Performance/Lentidão/Travamentos do Gestão Empresarial | ERP, consulte o artigo ERP - Performance/Lentidão/Travamentos - Onde é possível encontrar informações diversas sobre questões relacionadas a Performance/Lentidão/Travamentos (índice).
Atenção! Antes de realizar qualquer alteração, analise o impacto que poderá ter em outros lançamentos/processos do sistema.