Protheus lento? 4 cases reais de cliente que provam: o caminho mais rápido e barato é o banco de dados

Protheus lento? 4 cases reais de cliente que provam: o caminho mais rápido e barato é o banco de dados

🎧 Resumo de Live

Otimização de Banco de Dados Protheus (SQL Server)

Fabrício Lima  ·  Abril 2026

Live original: 1h 30min  ·  Leitura deste resumo: 10 min

Apresentador

Fabrício Lima  ·  LinkedIn ↗  ·  YouTube ↗

Sobre o que é

Uma live técnica sobre como resolver lentidão no ERP Protheus atuando diretamente no banco de dados SQL Server. Cobre a arquitetura de índices, análise de queries reais, compressão de dados (com reduções de 60% a 80%) e rotinas essenciais para o DBA manter o ambiente saudável.

💡 Principais Insights

Banco de dados é o caminho mais rápido e barato

Quando o Protheus fica lento, as empresas geralmente tentam comprar mais hardware ou reescrever código AdvPL. Ambos são caros e demorados. A atuação no banco de dados — principalmente criação e otimização de índices — resolve lentidões pontuais de forma rápida, barata e eficiente.

SELECT * é o inimigo número 1

Quando se solicita todas as colunas de uma tabela gigante, o SQL Server é forçado a fazer Key Lookup para cada linha. Com milhares de linhas, o otimizador desiste do índice e faz Table Scan — lendo a tabela toda. A lição: solicite apenas as colunas estritamente necessárias.

Compressão: de 242GB para 50GB

O Protheus preenche colunas vazias com espaços em branco em vez de NULL, desperdiçando espaço massivamente. A compressão nativa do SQL Server elimina esses vazios, reduzindo bancos entre 60% e 80%. O benefício vai além do disco: mais dados cabem na RAM, e leitura em memória é ordens de grandeza mais rápida que em disco.

Índices no JOIN, não só no WHERE

Ao juntar tabelas gigantes do Protheus (como SC5 e SC6), não basta ter índices nos filtros do WHERE. É crucial garantir índices nas colunas de junção (cláusula ON/JOIN), como Filial e Número do Pedido.

Updates/Deletes em massa: sempre em lotes

Nunca execute comandos que afetem milhões de linhas de uma vez. Isso trava a tabela, expande o LDF descontroladamente e, se cancelado, o rollback pode levar horas. A prática correta: fazer em lotes menores (loops).

Power Alerts + Tuning: a dupla que resolve

Sem monitoramento você está no escuro — esperando o usuário reclamar. O Power Alerts identifica queries lentas, locks, sessões sleeping e acompanha rotinas críticas como custo médio, saldo contábil e faturamento. Power Alerts + Tuning de queries é a solução mais rápida e barata para lentidão no Protheus — muito melhor que comprar mais infra.

💬 Frases que Marcaram

❝ “SELECT * é o inimigo número um da performance.”
❝ “Compressão no Protheus é mandatória. Não é opcional.”
❝ “Atuar no banco de dados é a forma mais rápida, barata e eficiente de resolver lentidão.”

📖 Resumo Detalhado

O Problema da Lentidão: 3 Caminhos

Quando o Protheus fica lento, as empresas tentam resolver de três formas diferentes. Cada uma com custo, prazo e efetividade muito distintos:

Caminho 1

📊 Hardware

Mais CPU, memória, SSD

Custo

Alto

Prazo

Semanas a meses

⚠ Problema costuma voltar conforme o banco cresce

Caminho 2

📝 AdvPL

Reescrever código do ERP

Custo

Médio-alto

Prazo

Demorado

⚠ Cria dependência de terceiros

★ FOCO DA LIVE

Caminho 3

💾 Banco de Dados

Índices, compressão, queries

Custo

Baixo

Prazo

Minutos a horas

✅ Resolve a causa, sem mexer no ERP

A terceira via é o foco da live: atuar no banco de dados é a forma mais rápida, barata e eficiente de resolver lentidões pontuais — principalmente através da criação e otimização de índices.

A Arquitetura e a Mágica dos Índices

O núcleo da otimização reside no uso adequado de índices, divididos em duas categorias:

Índice Clustered (Físico)

A própria tabela organizada em formato de árvore. No Protheus, é sempre a coluna R_E_C_N_O_. Só pode existir um por tabela — ele define a ordem física dos dados no disco.

Índices Nonclustered (Lógicos)

Estruturas de árvore separadas para facilitar buscas por outras colunas (Nome, Data, Filial). O Protheus possui dezenas desses índices por tabela.

Três conceitos fundamentais de leitura:

⚠ Scan (pior cenário)

SQL lê a tabela inteira para encontrar um dado. Como ler um livro inteiro para achar uma palavra.

✅ Seek (cenário ideal)

SQL vai direto ao ponto usando a árvore do índice. Máxima performance.

⚠ Key Lookup (intermediário)

SQL encontra a linha pelo índice nonclustered, mas precisa “pular” para o clustered para buscar colunas adicionais não presentes no índice.

O Perigo do SELECT *

Quando se solicita todas as colunas de uma tabela gigante, o SQL Server faz Key Lookup para cada linha encontrada. Com milhares de linhas, o otimizador percebe que milhares de lookups é excessivo e decide ignorar o índice — optando por um Table Scan, que lê a tabela toda e degrada severamente a performance. Lição fundamental: solicite apenas as colunas estritamente necessárias.

Índices nos JOINs, Não Só no WHERE

Ao juntar tabelas gigantes do Protheus (como SC5 e SC6), não basta ter índices nos filtros do WHERE. É crucial garantir índices nas colunas de junção (cláusula ON/JOIN), como Filial e Número do Pedido. Sem esses índices, o SQL Server é forçado a fazer Scans em tabelas enormes.

Ordem das Colunas no Índice Composto

A ordem importa muito. A regra geral: a coluna mais seletiva (que filtra mais dados, como Código do Produto) deve vir antes de colunas menos seletivas (como Filial, que tem muitos valores repetidos).

Compressão de Dados: O Segundo Trunfo

O Protheus preenche colunas vazias com espaços em branco em vez de NULL — desperdiçando espaço massivamente. A compressão nativa do SQL Server elimina esses vazios, com reduções reais entre 60% e 80%:

Casos reais de compressão:

● 242 GB → 50 GB (redução de 79%)

● 565 GB → 181 GB (redução de 68%)

O benefício vai além do disco: com o banco menor, muito mais dados cabem na RAM (Buffer Pool). Leitura em memória é ordens de grandeza mais rápida que em disco — a performance geral dá um salto gigantesco.

Rotinas Essenciais para o DBA

Queries Sleeping: Consultas que o sistema “esqueceu” abertas e que ficam segurando Locks (travando tabelas). Devem ser monitoradas e encerradas para evitar travamentos em cadeia.

Updates/Deletes em massa: Nunca execute comandos que afetem milhões de linhas de uma vez. Isso trava a tabela, expande o LDF descontroladamente e, se cancelado, o rollback pode levar horas. Faça sempre em lotes (loops).

Collation: No contexto do Protheus, a collation Latin1_General_BIN é significativamente mais rápida que as opções padrão, pois o SQL não precisa validar acentuação e diferenças entre maiúsculas/minúsculas nas comparações de strings.

Monitoramento: Saia do Escuro com o Power Alerts

Tuning sem monitoramento é tiro no escuro. Antes de otimizar qualquer coisa, você precisa enxergar o que está acontecendo no ambiente. O Power Alerts é fundamental para ambientes Protheus porque entrega exatamente essa visibilidade:

🔍 Queries mais demoradas

Identifica automaticamente as consultas que mais consomem CPU, fazem mais leituras e as que mais se repetem. É assim que você encontra as queries para otimizar.

🔒 Locks e sessões sleeping

Monitora travamentos em tempo real e identifica sessões esquecidas abertas que estão segurando locks desnecessariamente.

⚙ Rotinas críticas do Protheus

Acompanha a performance de rotinas como custo médio, saldo contábil, faturamento e outras — alertando quando algo sai do padrão.

Power Alerts + Tuning de queries é a solução mais rápida e barata para lentidão em ambiente Protheus. Muito melhor que comprar mais infraestrutura — e sem ficar no escuro esperando o usuário reclamar.

📈 Cases Reais: O Poder de um Índice

Pra ilustrar o impacto real dessas técnicas, separei 4 cases de clientes reais demonstrados na live. Em todos, a otimização levou minutos — o impacto, anos de tranquilidade pra equipe de TI.



Case 1 · CT2010 (48 milhões de registros)

O índice sugerido nem sempre é o melhor

Query filtrava por CT2_CREDIT. O SQL Server sugeriu um índice gigante com muitas colunas no INCLUDE — seria caro de manter numa tabela desse tamanho. A solução: um índice menor, apenas pela coluna seletiva CT2_CREDIT (420MB, criado em 5 minutos).

❌ Antes

5,7s

91.143 leituras · CPU 10.531ms

✅ Depois

0,07s

4 leituras · CPU 0ms

💡 Lição: índice menor e mais seletivo pode ser melhor que o sugerido pelo SQL.



Case 2 · SD2010 (86M de leituras no tempdb)

6 subqueries idênticas + TempDB massivo

Query com 6 subqueries idênticas no CASE e no WHERE, todas buscando na SD2010 sem índice por D2_COD. O operador Spool gerava 86 milhões de leituras no tempdb. A solução: 1 único índice estratégico cobrindo o padrão das subqueries.

❌ Antes

4m 05s

86M tempdb · CPU 362s

✅ Depois

3s

4.504 tempdb · CPU 12,6s

💡 Lição: um índice bem posicionado resolve múltiplas subqueries de uma vez.



Case 3 · SC5 + SC6 + SC9 (Pedidos)

481 milhões de leituras + Locks travando o banco

Query com múltiplos JOINs entre Pedidos (SC5), Itens (SC6) e Composição (SC9). Realizava 481 milhões de leituras na SC9 e — o pior — causava Locks que travavam outros processos do banco inteiro. Solução “sniper”: 3 índices estratégicos focados nas colunas de filtro e JOIN.

❌ Antes

2m 40s

481M leituras · CPU 1.183s

✅ Depois

4s

Locks eliminados

💡 Lição: índices nos JOINs são tão importantes quanto nos filtros WHERE.



Case 4 · SCT3W0 (15 minutos de execução)

SUBSTRING no WHERE mata o índice

O filtro usava SUBSTRING(CT_DATA, 1, 6) = ‘202101’. Quando você aplica uma função numa coluna do WHERE, o SQL não consegue usar índice — precisa aplicar a função em CADA linha. Resultado: Table Scan completo. Solução: reescrever o filtro sem função (CT_DATA >= ‘20210101’ AND CT_DATA < ‘20210201’) + índice otimizado.

❌ Antes

15 min

Table Scan completo

✅ Depois

segundos

Seek eficiente no índice

💡 Lição: NUNCA use funções em colunas do WHERE. Reescreva o filtro.

🎯 Pra quem é essa live?

DBAs que administram ambientes Protheus e precisam melhorar performance. Analistas de infraestrutura que recebem chamados de lentidão do ERP. Desenvolvedores AdvPL que querem entender como o banco processa suas queries. E gestores de TI avaliando se devem investir em hardware ou em otimização.

✅ Takeaways Rápidos

✓ Evite SELECT * — é o inimigo #1 da performance
✓ Crie índices nos JOINs, não só nos filtros WHERE
✓ Coluna mais seletiva primeiro no índice composto
✓ Compressão de dados no Protheus é mandatória
✓ Monitore e encerre Queries Sleeping
✓ Deletes/Updates em massa: sempre em lotes (loops)
✓ Use collation Latin1_General_BIN para Protheus
Power Alerts + Tuning = solução mais rápida e barata
✓ Otimize o banco antes de comprar mais hardware

Resumo por Power Tuning  ·  powertuning.com.br

Tags: , , , , , , , , , , , , , , , , , , , , , , , , , , , ,