6
✅ CHECKLIST COMPLETO DE TUNING — DELPHI + SQL SERVER
🟦 1. TUNING NA APLICAÇÃO DELPHI
🔧 1.1 Conexão e Componentes
- Usar FireDAC (mais rápido e mais seguro que dbExpress/Ado).
- Habilitar FetchOnDemand para evitar cargas enormes de dados.
- Configurar UpdateOptions.KeyFields para evitar updates lentos.
- Usar Array DML para inserts em massa.
- Usar TFDQuery com
ResourceOptions.SilentMode := Truepara reduzir overhead.
🔧 1.2 Melhores Práticas de Execução
- Evitar
Select *em todas as queries. - Usar parametrização obrigatória (evita recompilações no SQL Server).
- Evitar abrir datasets sem necessidade.
- Fechar queries logo após o uso.
- Evitar loops com SQL dentro (mover para stored procedure).
🔧 1.3 Otimização de Transações
- Transações curtas (delphi pode travar o banco se demorar).
- Nunca deixar componentes com
AutoCommit = Falsesem controle. - Usar
StartTransaction → Exec → Commit.
🟦 2. TUNING DE QUERIES (T-SQL)
🔬 2.1 Diagnóstico
- Capturar execution plan real.
- Verificar Key Lookup, Table Scan, RID Lookup.
- Identificar trechos com Sort, Hash Match, Spool (custo alto).
🛠 2.2 Ajustes
- Criar índices conforme necessidade.
- Evitar funções em colunas indexadas (
WHERE YEAR(Data) = 2025). - Trocar CURSOR por WHILE ou operações set-based.
- Usar Stored Procedures em vez de queries soltas.
- Evitar subqueries que possam virar JOIN.
- Evitar UDF escalar (deixa tudo lento).
🟦 3. TUNING DE ÍNDICES NO SQL SERVER
🧩 3.1 Avaliação
- Índices Fragmentados?
→sys.dm_db_index_physical_stats - Índices não utilizados?
→sys.dm_db_index_usage_stats - Índices duplicados?
→sys.indexes
🧩 3.2 Boas práticas
- Cada tabela deve ter 1 clustered index bem escolhido.
- Evitar muitos índices nonclustered (lentos no INSERT/UPDATE).
- Usar índices filtrados para tabelas grandes com poucos registros ativos.
- Usar cobertura (INCLUDE) para eliminar Key Lookup.
- Evitar índices com muitas colunas chave.
- Reorganizar quando fragmentação entre 10–30%.
- Rebuild quando > 30%.
🟦 4. TUNING NO BANCO DE DADOS
⚙️ 4.1 Configurações Gerais
MAXDOPajustado (geralmente = nº de núcleos/2).Cost Threshold for Parallelism≥ 50.- Auto Shrink desligado.
- Auto Close desligado.
- Auto Create Stats ligado.
- Auto Update Stats ligado.
⚙️ 4.2 Manutenção
- Job automático de:
- rebuild/reorganize índices
- update statistics
- integrity check (DBCC CHECKDB)
- Log em tamanho adequado (não pode crescer toda hora).
- Tabelas de auditoria/Log limpas regularmente.
🟦 5. TUNING DE REDE (APP ↔ BANCO)
- Usar conexões persistentes (evitar conectar/desconectar).
- Verificar latência (ideal < 5ms).
- Manter SQL Server e aplicação na mesma rede local quando possível.
- Evitar VPN para sistemas críticos.
- Habilitar Compression no FireDAC quando enviar datasets grandes.
🟦 6. TUNING DE HARDWARE
🔥 Disco
- Banco e LOG em discos diferentes.
- SSD obrigatório.
- TempDB em SSD separado (ganho enorme).
💾 Memória
- SQL Server com memória máxima configurada (não deixar padrão!).
- Reservar memória mínima também.
🧮 CPU
- Verificar SOS_SCHEDULER_YIELD e CXPACKET.
- Ajustar MAXDOP.
🟦 7. TUNING DO TEMPDB
- Criar múltiplos arquivos (1 por core, até 8).
- Tamanho inicial grande (evitar autogrowth).
- Habilitar trace flags (1117, 1118 em versões antigas).
- Banco em SSD separado.
🟦 8. MONITORAMENTO
📈 Ferramentas recomendadas
- SQL Profiler (apenas diagnóstico rápido).
- Extended Events (produção).
- DMVs (uso constante).
- Performance Monitor.
- Query Store (SQL 2016+).
🎯 Indicadores
- CPU acima de 80% constante?
- Discos acima de 20ms de latência?
- Memory Grants pending?
- Page Life Expectancy < 300?
- Waits de:
- CXPACKET
- PAGEIOLATCH
- WRITELOG
🟦 9. TUNING DE STORED PROCEDURES
- Evitar parâmetros com valores “atípicos” em SP (usar OPTION RECOMPILE quando necessário).
- Usar table variables apenas para poucas linhas.
- Usar temp tables para muitas linhas.
- “Break” procedures grandes em partes menores.
- Retornar só o que a aplicação usa.
🟦 10. TUNING EXCLUSIVO PARA DELPHI
🖥 Interface + Experiência
- Não carregar grids com 100.000 linhas.
- Usar paginação.
- Fazer pré-carga de lookup tables.
- Usar cache em memória (TList, TObjectList, FDCache).
🔌 Conexão
- Não abrir e fechar conexão a cada clique.
- Share de conexão entre queries sempre que fizer sentido.
🟦 11. CHECKLIST FINAL RÁPIDO (MACRO)
🔥 Aplicação Delphi
- Queries otimizadas
- Parâmetros
- Paginação
- FetchOnDemand
- FireDAC configurado
🔥 SQL Server
- Índices ajustados
- Stats atualizadas
- Queries sem funções nas colunas
- TempDB otimizado
- MAXDOP ajustado
🔥 Infra
- SSD
- Redes rápidas
- Memória configurada
- Job de manutenção

