Boas práticas de SQL Server 2022/2025 em servidor dedicado ou VM no Proxmox: discos separados em 64 KB, memória máxima, MAXDOP, tempdb e backup.
Para que serve
Boa parte dos ERPs usados no Brasil roda sobre Microsoft SQL Server. A instalação padrão funciona, mas deixa ajustes importantes de fora: por padrão, o SQL Server ocupa toda a RAM disponível, coloca dados, log e tempdb no mesmo disco e deixa o log de transações crescer sem limite. Este artigo reúne as boas práticas de SQL Server que mais fazem diferença em um servidor dedicado ou em uma VM no Proxmox, nas versões 2022 e 2025.
Pré-requisitos
- Windows Server 2022/2025 atualizado, de preferência em uma VM dedicada ao banco.
- Instalador do SQL Server e o SQL Server Management Studio (SSMS).
- Conhecer os limites da sua edição. A Express é gratuita, mas limitada a cerca de 1,4 GB de memória de buffer, a no máximo 4 núcleos e a bancos de 10 GB (50 GB na 2025). A Standard 2025 vai até 32 núcleos e 256 GB de buffer. Bancos que passam disso precisam da Enterprise. A E-Consulters revende licenças de SQL Server: fale com o comercial se precisar.
Passo a passo: boas práticas de SQL Server
1. Separar os discos antes de instalar
Crie volumes separados, todos nos discos NVMe do servidor. No Proxmox, isso significa discos virtuais separados na VM, todos com VirtIO SCSI:
| Letra | Conteúdo | Por quê |
|---|---|---|
| C: | Windows e binários do SQL | Isola o sistema operacional |
| E: | Arquivos de dados (.mdf/.ndf) | Leitura e escrita aleatórias |
| F: | Logs de transação (.ldf) | Escrita sequencial e sensível a latência |
| T: | tempdb | Uso intenso em ordenações e tabelas temporárias |
| G: | Backups | Uma área que você copia para fora do servidor |
Formate os volumes de dados, log e tempdb com unidade de alocação de 64 KB, que combina com o tamanho das extensões do SQL Server:
Format-Volume -DriveLetter E -FileSystem NTFS -AllocationUnitSize 65536 -NewFileSystemLabel "SQLData"
Format-Volume -DriveLetter F -FileSystem NTFS -AllocationUnitSize 65536 -NewFileSystemLabel "SQLLog"
Format-Volume -DriveLetter T -FileSystem NTFS -AllocationUnitSize 65536 -NewFileSystemLabel "SQLTempDB"
Format-Volume apaga todo o conteúdo do volume. Confira a letra antes de executar.2. Escolhas na instalação
- Na aba Configuração do Servidor, marque Conceder o privilégio Executar Tarefas de Manutenção de Volume (Instant File Initialization). Com isso, o crescimento dos arquivos de dados e as restaurações ficam muito mais rápidos.
- Na aba Diretórios de Dados, aponte dados para
E:, log paraF:e backup paraG:. - Na aba TempDB, aponte para
T:. O instalador já sugere um arquivo por núcleo, até 8, com o mesmo tamanho. Aumente o tamanho inicial para algo realista (por exemplo, 1 a 4 GB por arquivo) e use crescimento fixo em MB. - Na aba MaxDOP, aceite a sugestão do instalador.
- Na aba Memória, escolha a opção Recomendado e ajuste conforme o passo 3.
- Use autenticação do Windows sempre que possível. Se o ERP exigir o modo misto, dê ao
sauma senha longa e use outro login para o sistema.
3. Limitar a memória do SQL Server
Sem limite, o SQL Server ocupa quase toda a RAM e o Windows (ou o RDS na mesma máquina) passa a paginar. Reserve memória para o sistema e para outros programas. Como referência para uma VM só de banco:
- VM com 16 GB: SQL com cerca de 12 GB.
- VM com 32 GB: SQL com cerca de 26 GB.
- VM com 64 GB: SQL com cerca de 54 GB.
Se o mesmo Windows também roda RDS ou o servidor de aplicação do ERP, desconte o consumo deles. Aplique no SSMS (nova consulta):
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'max server memory (MB)', 26624;
RECONFIGURE;
A mudança vale na hora, sem reiniciar. No Proxmox, desative o ballooning da VM do banco e use memória fixa, para o host não "tomar de volta" a RAM que o SQL Server está usando como cache.
4. Paralelismo
EXEC sp_configure 'max degree of parallelism', 8;
EXEC sp_configure 'cost threshold for parallelism', 50;
RECONFIGURE;
A regra da Microsoft é simples: até 8 núcleos lógicos por nó NUMA, o MAXDOP não deve passar do número de núcleos; acima disso, use 8. Para ERPs com muitas consultas pequenas, subir o cost threshold do padrão 5 para algo como 50 evita paralelizar consultas triviais. Siga sempre a recomendação do fabricante do seu ERP quando houver.
5. Modelo de recuperação e backup
Esta é a causa mais comum de "disco cheio do nada": banco em modelo FULL sem backup de log. Nesse modelo, o arquivo .ldf cresce até ocupar o disco inteiro. Escolha uma das opções:
- SIMPLE: o log se recicla sozinho. Você restaura só até o último backup completo ou diferencial.
- FULL: permite restaurar até um minuto específico, mas exige backup de log frequente (a cada 15 ou 30 minutos, por exemplo).
-- Consultar o modelo de cada banco
SELECT name, recovery_model_desc FROM sys.databases;
-- Backup completo comprimido e com verificação
BACKUP DATABASE [ERP] TO DISK = N'G:\Backup\ERP_full.bak'
WITH COMPRESSION, CHECKSUM, INIT;
-- Backup de log (apenas no modelo FULL)
BACKUP LOG [ERP] TO DISK = N'G:\Backup\ERP_log.trn'
WITH COMPRESSION, CHECKSUM;
Na Standard e na Enterprise, agende os backups pelo SQL Server Agent (Planos de Manutenção). Na Express, que não tem o Agent, use o Agendador de Tarefas do Windows chamando sqlcmd com um script. Depois, copie a pasta G:\Backup para fora do servidor. O backup é responsabilidade sua; veja também o artigo «Como fazer backup do SQL Server (inclusive Express) com T-SQL, agendamento e teste de restauração».
6. Segurança de rede
Não exponha a porta 1433 à internet. Ela é varrida constantemente por robôs que tentam a senha do sa. Se a aplicação estiver em outra VM, libere a porta no firewall do Windows só para o IP dela:
New-NetFirewallRule -DisplayName "SQL Server 1433 - app" -Direction Inbound -Protocol TCP -LocalPort 1433 -RemoteAddress 10.10.10.30 -Action Allow
Acessos externos, como estações de usuários ou integrações, devem passar por VPN.
Como saber se funcionou
-- Memória e paralelismo configurados
SELECT name, value_in_use FROM sys.configurations
WHERE name IN ('max server memory (MB)','max degree of parallelism','cost threshold for parallelism');
-- Arquivos de tempdb (mesmo tamanho e no volume T:)
SELECT name, physical_name, size*8/1024 AS tamanho_mb FROM tempdb.sys.database_files;
-- Instant File Initialization ativo
SELECT servicename, instant_file_initialization_enabled FROM sys.dm_server_services;
-- Último backup de cada banco
SELECT d.name, MAX(b.backup_finish_date) AS ultimo_backup
FROM sys.databases d LEFT JOIN msdb.dbo.backupset b ON b.database_name = d.name
GROUP BY d.name;
Confira também a unidade de alocação com fsutil fsinfo ntfsinfo E:. O campo "Bytes por cluster" deve mostrar 65536.
Problemas comuns
- Arquivo .ldf enorme: o banco está em FULL sem backup de log. Faça um backup de log (ou mude para SIMPLE, se a restauração até o último backup completo bastar) e só depois reduza o arquivo com
DBCC SHRINKFILE. Não faça shrink como rotina. - Servidor lento e com pouca RAM livre: o max server memory continua no padrão. Aplique o passo 3.
- SQL Server não inicia depois de mudar a memória: o valor ficou baixo demais. Inicie o serviço com o parâmetro
-f(configuração mínima), corrija o valor e reinicie normalmente. - Erro 17890 no log ("parte significativa da memória foi paginada"): o Windows está paginando o SQL Server. Revise o limite de memória e, nas edições Standard ou superiores, avalie conceder Lock Pages in Memory à conta do serviço.
- Antivírus deixando o banco lento: exclua da varredura em tempo real as pastas de dados, log, tempdb e backup e as extensões
.mdf,.ndf,.ldf,.bake.trn.
Para aprofundar memória, MAXDOP e tempdb, veja também o artigo «Como configurar SQL Server: memória máxima, MAXDOP, tempdb e arquivos em NVMe». Se o banco roda em VM, veja «Banco de dados em VM no Proxmox: disco, cache e ZFS (volblocksize, recordsize e sync)».
Perguntas frequentes
Quanto de memória deixar para o Windows em uma VM com SQL Server?
Como referência, em uma VM só de banco deixe cerca de 4 GB livres em 16 GB e um pouco mais em VMs maiores (por exemplo, SQL com 54 GB em uma VM de 64 GB). Desconte também o RDS ou a aplicação, se rodarem na mesma VM.
Posso usar o SQL Server Express em produção?
Pode, desde que o banco caiba nos limites: cerca de 1,4 GB de buffer, até 4 núcleos e bancos de 10 GB (50 GB na versão 2025). Além disso, a Express não tem o SQL Server Agent.
Por que o arquivo de log (.ldf) do SQL Server cresce tanto?
Quase sempre o banco está no modelo FULL sem backup de log. Agende backups de log frequentes ou mude para SIMPLE, se a restauração até o último backup completo bastar.
Posso liberar a porta 1433 para a internet?
Não. Libere apenas para o IP da aplicação no firewall do Windows e faça os acessos externos por VPN.
Leitura complementar
- Microsoft Learn: opções de memória do SQL Server
- Microsoft Learn: banco tempdb
- Microsoft Learn: max degree of parallelism
Precisa de ajuda? Abra um ticket na área do cliente ou fale com o suporte pelo WhatsApp.
