ERP - Performance/Lentidão/Travamentos - Quais são as orientações gerais para otimização de Performance
Dúvida
Quais são as orientações gerais para otimização de Performance?
Solução
Abaixo seguem as orientações gerais para otimização de Performance.
1. Configuração de Carregamento de Registros em Telas de Pesquisa
Você deve configurar o sistema para que as telas de pesquisa não carreguem dados ao abrir a tela. Desta forma, a navegação entre telas será otimizada, reduzindo acessos sequenciais a tabelas de sistema. Para tabelas com grande volume de informação, a melhoria será significativa.
A forma mais rápida de fazer esse processo é executando um comando na base de dados. Você deve executar esse comando quando nenhum usuário estiver utilizando o sistema.
Motivo: quando um usuário sai do sistema, o sistema grava as informações de configuração relacionada as telas de pesquisa na base de dados, substituindo todas as informações que tenham sido alteradas (mesmo que via banco de dados).
1.1. Abra algum aplicativo de acesso ao banco de dados (seja CBDS ou qualquer outro) e faça a conexão à base de dados;
1.2. Execute o comando abaixo:
UPDATE R999PSQ SET AUTSHO=0
Importante
- O comando alterará a parametrização de todas as telas de pesquisa para todos os usuários. Caso necessário especificar alguns usuários/telas específicos para manter a configuração, você deve alterar o comando acima fazendo filtros WHERE no comando com base nos campos NOMPSQ e CODUSU.
- Lembre-se que o NOMPSQ equivale ao código da tela de pesquisa que fica no rodapé da tela quando ela é aberto, conforme exemplo na imagem abaixo:
2. Configuração de Performance da Tela - Não carregar registros ao abrir a tela
Você deve configurar o sistema para que as telas padrões de cadastros (exemplo: Produtos, Clientes, Fornecedores) não carreguem dados ao abrir a tela.
As orientações descritas abaixo terão efeito para todos os usuários e todas as telas.
2.1. Acesse a tela F075PRO - Cadastros / Produtos e Serviços / Produtos / Individual
2.2. Clique com botão direito do mouse e acesse a opção 'Configurações de performance da tela':
2.3. Selecione as opções:
Na seção Abrir: 'Em branco (edição de chave)'
Na seção Salvar configuração: 'Para todos os usuários' e 'Para todas as telas do sistema'
2.4. Clique em OK.
3. Parâmetro global LisVarReg
Quando habilitado o parâmetro global 'LisVarReg', esse alimentará uma variável que estará disponível em todos os identificadores de regras do sistema. Esta variável de regra se chama 'ListaVariaveis', e o seu conteúdo será a lista de campos disponibilizados no identificador de regras em questão. Esse parâmetro deve ser utilizado apenas para apoio no desenvolvimento de regras e/ou depuração das mesmas. Ele não deve estar habilitado em ambiente de produção para uso cotidiano.
Desta forma, siga os passos abaixo para desabilitá-lo
3.1. Acesse a tela F000PGS - Cadastros / Identificadores e parâmetros / Parâmetros Globais;
3.2. Procure o parâmetro 'LisVarReg' e confirme que ele está com o valor 'N' definido. Se não estiver, efetue a alteração;
3.3. Clique no botão Processar.
3.4. Caso tenha havido necessidade de alteração do parâmetro, o Middleware Senior deverá ser totalmente reiniciado, bem como todos os usuários devem sair e entrar no sistema novamente.
4. Configurações no SeniorConfigCenter
4.1. Acesse o SeniorConfigCenter;
4.1.1. Na opção Banco de Dados / Gestão Empresarial (ERP), acione o botão Avançado;
4.1.2. Valide que a opção 'Sempre buscar a data e hora do banco de dados (desotimizado)' esteja desmarcado. Abaixo segue print dessa configuração disponível nas configurações de Oracle e SQLServer;
Oracle
SQLServer
4.1.3. Caso o seu banco de dados seja Microsoft SQLServer, os campos 'Utiliza ROWLOCK para travamento de registros' e 'Utiliza comportamento para performance do driver de banco' devem estar marcados.
4.1.2. Na opção Opções de segurança / Formas de logon por tipo de acesso, revise as configurações de login de cada tipo de acesso.
Nesse tema, é importante que você valide qual a forma adequada de login para cada tipo de acesso. A utilização de uma autenticação incorreta poderá causar problemas de performance. Exemplo de um cenário onde a parametrização inadequada poderá causar perda de performance em processo:
- Utiliza-se o sistema em um ambiente Cloud com autenticação LDAP;
- A autenticação LDAP depende de uma conectividade com um servidor On-Premise do Cliente;
- Esse canal de comunicação entre o ambiente Cloud e On-Premise para autenticação LDAP é realizado via uma VPN;
- A comunicação entre os servidores para fazer a autenticação varia, em média, entre 15 a 40 segundos;
- A autenticação utilizada para Webservices no SeniorConfigCenter é 'Logon com validação do usuário via LDAP';
- Neste cenário, cada chamada de WebService terá um atraso de 15 a 40 segundos para ser executado, pois é o tempo do processo de validação de usuário/senha na chamada de cada requisição de WebService. Neste caso, a orientação para aumentar a performance para esse processo é alterar a autenticação de WebService para 'Logon proprietário Senior'.
Importante
Qualquer alteração realizada no SeniorConfigCenter só terá efeito após você reiniciar todo o ambiente (estações e Middleware).
5. Declaração de WebService em regra LSP apenas quando ele de fato for utilizado
As regras LSP permite utilização de WebServices (tanto nativos como customizados).
A declaração do WebService na regra LSP ocorre da seguinte forma:
Definir interno.com.senior.g5.co.mcm.est.estoques.MovimentarEstoque SrvEstoque;
O exemplo acima é a declaração de um WebService de Movimentação de Estoque.
Ocorre que nem sempre um WebService é utilizado toda vez que a regra é executada.
Por exemplo: dentro de uma regra o WebService pode ser acionado somente se o a transação da NF Fiscal for igual a "5102".
Neste caso, a melhor prática para declaração do WebService é apenas declará-lo dentro dos trechos da regra onde o WebService de fato será utilizado.
Exemplo (baseado no cenário já explicado acima):
Ao invés de fazer a declaração já no cabeçalho da regra, a declaração ocorreria assim:
Se (VsCodTns = "5102")
Inicio
Definir interno.com.senior.g5.co.mcm.est.estoques.MovimentarEstoque SrvEstoque;
SrvEstoque.DadosGerais.CriarLinha();
SrvEstoque.DadosGerais.CodPro = "1101";
SrvEstoque.DadosGerais.CodDer = " ";
SrvEstoque.DadosGerais.CodDep = "DEP01";
SrvEstoque.DadosGerais.CodTns = "90204";
SrvEstoque.DadosGerais.QtdMov = "1";
SrvEstoque.DadosGerais.VlrMov = "10";
SrvEstoque.DadosGerais.DatMov = "20/06/2018";
SrvEstoque.ModoExecucao = 1;
SrvEstoque.Executar();
VMensagemRetorno = SrvEstoque.MensagemRetorno
Fim;
Seguindo esse processo, você irá garantir que o sistema carregue para a memória as bibliotecas necessárias para executar o WebService declarado apenas no momento em que ele precise de fato ser executado. Para todas as demais execuções da regra em que não seja necessário executar o WebService, não haverá o carregamentos das bibliotecas relacionadas, garantindo uma melhor performance do processamento da regra.
Importante
Em um cenário onde regras são executadas constantemente e processam alto volume de registros, esse tipo de ajuste que pode parecer muito simplório poderá trazer um ganho substancial de performance.
Desta forma, é importante que você revise todas as regras LSP e WebServices customizados do seu ambiente e adeque-os utilizando o conceito descrito acima. Caso você tenha dificuldades em encontrar os WebService customizados na base do sistema, verifique o artigo ERP - WebServices - Como encontrar os WebServices/Portas customizadas na base de dados.
6. Logs ativados que podem impactar em rotinas
Logs do sistema são muito importantes para análises de situações que possam ocorrer. No entanto, em alguns momentos a ativação de Logs (principalmente logs de texto, que consomem recursos de leitura e escrita em disco) podem impactar negativamente a performance de rotinas. Portanto, abaixo seguem orientações sobre desativação de Logs de texto que podem influenciar rotinas de forma abrangente.
Importante
Utilize essas orientações de desativação como um ponto de validação para possível melhoria de performance em uma rotina que esteja apresentando lentidão. Caso não haja diferença de performance na rotina analisada, os Logs podem continuar ativos (principalmente os Logs do Middleware Senior, porque eles ajudam muito na análise de situações). Sendo assim, não tome como verdade absoluta de que os Logs devem ser sempre desativados para que que a performance do sistema esteja adequada. Se você identificar diferença significativa na execução de alguma rotina quando os Logs estão habilitados, você poderá coletar essas evidências (inclusive os Logs que são gerados) e entrar em contato com seu Canal de Atendimento para maiores informações/orientações a respeito disso
6.1. Logs adicionais de execução (parâmetros -log, -callstack e -devtools)
Esses logs são gerados quando na linha de comando de inicialização do sistema esses parâmetros são definidos.
Exemplo de um atalho do sistema com os Logs habilitados:
Quando o sistema é aberto com esses parâmetros, na barra de título do sistema os parâmetros são mencionados (exceto o -devtools que não é exibido)
Além disso, logs de texto adicionais são criados em pastas do sistema. Exemplo abaixo, do log que é criado devido ao parâmetro -log habilitado:
Através do menu Recursos / Novo Sistema é possível selecionar parâmetros de inicialização pré-definidos para uma nova instância do sistema, ou ainda definir parâmetros manualmente (sem precisar manipular o atalho de acesso ao sistema)
Então neste caso a orientação é realizar testes e validações de performance sem ter esses logs habilitados.
6.2. Logs do Senior Middleware
Os Logs do Middleware são configurados/ativados pelo SeniorConfigCenter, dentro da opção Middleware / Logs de execução, conforme print de exemplo abaixo:
Esses Logs afetam apenas as execução de processos que são de fato executados no Senior Middleware (WebServices, Processos Agendados, BrowserAccess, WindowsAccess, SeniorSID, SapiensWeb), não impactando execução que sejam efetuadas no modelo de conexão Cliente-Servidor.
No entanto, os Logs do Middleware estando habilitados podem acabar ativando logs adicionais que seriam habilitados quando os parâmetros -log, -callstack e -devtools estivessem na conexão padrão Cliente-Servidor.
Neste caso, a orientação é que sejam desativados os Logs para efeito de validação da performance da rotina.
Importante
A alteração do parâmetro de Logs ativados no SeniorConfigCenter exige o reinicio do SeniorMiddleware em todos os Servidores de Middleware.
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).