Quando o Protheus fica lento, a primeira reação é pedir mais servidor. Mais memória, mais processador, disco novo. Às vezes resolve. Muitas vezes a lentidão continua, porque a causa estava em outro lugar.
Depois de mais de 15 anos mexendo com Protheus, eu sigo sempre o mesmo roteiro antes de falar em hardware. São seis pontos, do mais comum para o menos comum.
1. Falta de índice nas consultas mais usadas
É o campeão. Uma consulta que filtra por um campo sem índice obriga o banco a ler a tabela inteira. Com poucos registros ninguém percebe. Com alguns anos de movimento, a tela trava.
No SQL Server, olhe o plano de execução das consultas mais pesadas. Se aparecer leitura completa da tabela (table scan) em tabelas grandes como SD1, SD2, SE1 ou SE2, quase sempre falta um índice que cubra aquele filtro.
2. Customização que consulta registro por registro
Muita rotina em ADVPL foi escrita com um laço que posiciona em cada registro e faz outra busca dentro dele. Funciona, mas multiplica as idas ao banco. Mil itens viram milhares de consultas.
Trocar o laço por uma consulta única, com Embedded SQL, costuma derrubar o tempo de minutos para segundos. Vale conferir também se as consultas trazem só os campos necessários. Um SELECT * em tabela larga pesa mais do que parece.
3. Registros excluídos que continuam na tabela
O Protheus não apaga o registro de verdade. Ele marca o campo D_E_L_E_T_. Com o tempo, tabelas de movimento acumulam milhões de linhas marcadas, que continuam ocupando espaço e entrando nas leituras.
Confira quanto de cada tabela grande está marcado como excluído. Se for uma fatia alta, vale planejar a limpeza em uma janela de manutenção, com backup antes.
4. Banco sem manutenção
Índice fragmentado e estatística desatualizada fazem o SQL Server escolher caminhos ruins, mesmo quando o índice certo existe.
- Existe rotina semanal para reorganizar ou reconstruir índices?
- As estatísticas são atualizadas com frequência?
- O limite de memória do SQL Server está configurado, ou ele disputa memória com outros serviços na mesma máquina?
É um trabalho que quase ninguém vê e que muda o dia de todo mundo.
5. Caminho longo entre AppServer, DBAccess e banco
Cada operação passa pelo AppServer, pelo DBAccess e chega ao banco. Se essas peças estão em redes diferentes, ou longe uma da outra, a latência se soma em cada consulta.
Confira também o balanceamento: muito usuário pendurado no mesmo serviço, enquanto os outros ficam folgados, cria fila mesmo com servidor sobrando.
6. Rotina pesada no horário de pico
Relatório grande, recálculo de custo, integração e job agendado rodando às dez da manhã disputam o banco com quem está faturando. O sistema inteiro sente.
Liste o que roda no agendador e em que horário. Só mover os processos pesados para a noite já alivia bastante.
E quando é o servidor mesmo?
Acontece. Disco lento, pouca memória para o banco e máquina compartilhada com outros sistemas pesam de verdade. A diferença é que, depois desses seis pontos, você investe em hardware sabendo que o dinheiro vai para o lugar certo.
Se o seu Protheus está lento e você não sabe por onde começar, me chame no WhatsApp. Eu ajudo a achar a causa antes de qualquer compra.