Home BlogSQL Checklist completo, profissional e super prático para tuning Delphi + SQL Server — cobrindo aplicação, conexão, banco, índices, queries, rede, infraestrutura e monitoramento.

Checklist completo, profissional e super prático para tuning Delphi + SQL Server — cobrindo aplicação, conexão, banco, índices, queries, rede, infraestrutura e monitoramento.


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 := True para 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 = False sem 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

  • MAXDOP ajustado (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


related posts

Leave a Comment