01. DADOS GERAIS
Linha de Produto: | Microsiga Protheus |
---|---|
Segmento: | Supply Chain - Logística |
Módulo: | SIGAGFE - Gestão de Frete Embarcador |
Função: | GFEA115 - Importar Conemb GFEA118 - Importar CT-e |
Ticket: | 5396793 |
Requisito/Story/Issue (informe o requisito relacionado): | DLOGGFE-8967 |
02. SITUAÇÃO/REQUISITO
2.1. Problemas:
- Ao importar Notas de CT-e (Conhecimento de Transporte Eletrônico) ocorre problema de performance. O sistema leva muito tempo para processar os arquivos.
- No momento da importação, o sistema não indica o percentual de conclusão na barra de progresso. Como é uma atividade que exige muito processamento, é imprescindível que o sistema demonstre ao usuário o tempo restante para concluir a importação.
2.2. Onde ocorrem os problemas:
Os problemas citados ocorrem nas seguintes rotinas:
- Importar Conemb (GFEA115)
- Importar Ct-e (GFEA118)
2.3. Como ocorrem os problemas:
Constatou-se que a aplicação estava realizando muitas consultas no banco de dados, e que nestas consultas, os índices não eram adequados.
Assim, tanto a aplicação quanto o dicionário de dados (na parte de índices) necessitaram de ajustes.
2.4. Metodologia de teste:
Para avaliar a situação o seguinte cenário foi utilizado:
Ambiente:
- Protheus 12.1.23
- RPO: Lobo Guará
- APP Server, DB Access e Smartclient instalados localmente na mesma máquina
- Banco de dados: Microsoft SQL Server 2014
- Sistema Operacional: Windows 7 64 bits
- Memória: 8 GB
Importação de arquivos:
- Foi testada a importação de dois arquivos EDI simultaneamente, cada um com 155 linhas.
Rotinas:
- A rotina utilizada para teste foi a Importar Conemb (GFEA115), visto que ambas as rotinas possuem a mesma chamada à função de importação localizada nesta rotina.
2.5. Resultados obtidos:
1) Barra de progresso nunca progride:
2) Tempo total de processamento dos arquivos: 3 min e 21 segundos:
3) Exemplos de consultas redundantes:
4) Plano de execução do SQL Server - Tabela GW1:
5) Plano de execução do SQL Server - Tabela GXP:
6) Plano de execução do SQL Server - Tabela GXG:
7) SQL Profiler - Quantidade de Consultas x Recursos:
8) SQL Profiler - Consultas mais demoradas:
9) SQL Profiler - Consultas que consomem mais recursos:
10) SQL Profiler - Arquivo de trace:
03. SOLUÇÃO
Após a análise criteriosa dos dados obtidos acima, foram realizadas as otimizações necessárias.
No banco de dados foi necessário criar novos índices, embasados na análise estatística do SQL Profiler e nos planos de execução.
Ademais, a aplicação foi corrigida para consumir menos consultas no banco de dados.
Dicionário de Dados
Para atualização do sistema, deve ser seguida a orientação descrita na seguinte página para atualizar o dicionário de dados - Atualizador de dicionário e base de dados - UPDDISTR
1. Criação ou Alteração de Índices no arquivo SIX – Índices:
Índice | GW1 |
Ordem | K |
Chave | GW1_NRDC+GW1_EMISDC+GW1_SERDC+GW1_FILIAL |
Descrição | Numero + Emissor + Serie + Filial |
Proprietário | S |
Índice | GW1 |
Ordem | C |
Chave | GW1_DANFE+GW1_FILIAL |
Descrição | Chave NF-e + Filial |
Proprietário | S |
Índice | GU3 |
Ordem | F |
Chave | GU3_IDFED+GU3_FILIAL+GU3_SIT |
Descrição | CNPJ + Filial + Situação |
Proprietário | S |
Índice | GXP |
Ordem | 5 |
Chave | GXP_DOCORI + GXP_EMIORI + GXP_SERORI + GXP_FILIAL |
Descrição | Doc Orig + Emissor Orig + Serie Orig + Filial |
Proprietário | S |
Índice | GXP |
Ordem | 6 |
Chave | GXP_NRDC + GXP_EMISDC + GXP_SERDC + GXP_CDTPDC + GXP_FILIAL |
Descrição | Numero + Emissor + Serie + Tipo Docto + Filial |
Proprietário | S |
Procedimentos para testar a rotina:
- Caso a correção não esteja disponível na release oficial, executar a função UPDDISTR não surtirá efeito. Então é necessário criar os índices via Configurador (SIGACFG). Para isso, execute o SIGACFG, acesse Base de Dados > Dicionário, e crie os índices mencionados;
- Em Gestão de Frete Embarcador (SIGAGFE), acesse: Atualizações > Integrações> Edi > Importar Conemb (GFEA115);
- Clique no botão Importar;
- Selecione os parâmetros desejados na tela de perguntas;
- Verifique se a barra de progresso está funcionando, e se o tempo de processamento foi reduzido.
04. DEMAIS INFORMAÇÕES
Para a otimização funcionar completamente, é necessário que os índices sejam criados e que a rotina seja atualizada. É necessário criar os índices manualmente através do SIGACFG, caso a correção ainda não esteja oficializada na release atual.IMPORTANTE!
Resultados obtidos após a otimização:
1) Tempo de processamento reduzido de 3 minutos e 21 segundos para 1 minuto e 16 segundos:
2) Corrigida a régua de progressão:
3) As consultas no banco de dados foram reduzidas:
- Número de consultas: de 26.525 consultas para 8.387
- Tempo de duração: de 4 minutos para 2 minutos
- Quantidade de CPU em milissegundos: de 39.659 para 5.006
- Número de leituras de Input/Output: de 1.036.961 para 149.398
05. ASSUNTOS RELACIONADOS
- Importação de EDI CONEMB (GFEA115 - SIGAGFE)
- Importação de XML CT-e (GFEA118 - SIGAGFE)
- SQL Server 2017 Query Performance Tuning: Troubleshoot and Optimize Query Performance