SQL Server

Como prever quando o banco SQL Server ficará sem espaço

O disco cheio costuma ser o fim de uma tendência visível. Aprenda a medir crescimento, espaço livre e arquivos do SQL Server antes da parada.

O banco SQL Server ficará sem espaço quando a taxa de crescimento dos arquivos superar a capacidade livre do volume. A forma confiável de prever isso é registrar o tamanho dos arquivos e o espaço disponível ao longo do tempo, não esperar o alerta de disco cheio. Esse histórico também ajuda a distinguir crescimento normal de uma query que passou a bloquear as outras e elevou a carga do ambiente.

O incidente raramente começa no momento em que o volume chega a 0%. Ele começa antes: um arquivo de dados cresce a cada carga, o log não é truncado como deveria, um tempdb aumenta durante um período de manutenção ou os backups acumulam no mesmo volume da produção. Quando o alerta aparece, a janela para decidir com segurança já ficou pequena.

O que precisa ser medido

Há três medidas diferentes, e misturá-las produz previsões erradas:

  • espaço livre no volume do sistema operacional;
  • espaço livre dentro de cada arquivo de dados;
  • crescimento do log de transações e dos arquivos temporários.

Um volume pode ter espaço livre enquanto um arquivo de dados já está perto do limite configurado. O inverso também acontece: o arquivo ainda tem espaço interno, mas o volume não consegue atender ao próximo autogrowth. A capacidade precisa ser acompanhada nos dois níveis.

Uma consulta inicial para mapear os arquivos é:

SQL
SELECT    DB_NAME(database_id) AS database_name,    type_desc,    name AS logical_name,    physical_name,    size * 8.0 / 1024 AS size_mb,    max_size,    growth,    is_percent_growthFROM sys.master_filesORDER BY database_name, type_desc, logical_name;

max_size = -1 não significa que existe capacidade infinita. Significa que o arquivo pode crescer até o limite do volume ou do sistema de arquivos. Já o crescimento percentual torna o comportamento difícil de prever: à medida que o arquivo aumenta, o próximo incremento fica maior.

Autogrowth não é planejamento de capacidade

O autogrowth é um mecanismo de proteção. Ele permite que o SQL Server aumente um arquivo quando a alocação atual não basta. Não é uma estratégia para decidir quando comprar armazenamento, porque o crescimento acontece durante a operação e pode bloquear sessões enquanto o novo espaço é inicializado.

Em arquivos de dados, incrementos muito pequenos geram muitos eventos de crescimento e fragmentação interna. Incrementos muito grandes podem provocar uma pausa longa e consumir o espaço que deveria sustentar outras bases. O tamanho adequado depende do ritmo de escrita e da janela disponível, por isso copiar um número de outra instância é uma simplificação perigosa.

O mais importante é evitar crescimento percentual e definir incrementos absolutos revisados a partir do histórico. O arquivo deve crescer antes de ficar cheio, em uma mudança planejada, não no meio da transação que já está aguardando espaço.

Como transformar histórico em prazo

Uma fotografia informa o estado. Uma série temporal informa o prazo. Para cada arquivo, guarde pelo menos o tamanho total, o espaço usado, o espaço livre no volume e a data da coleta. Com uma semana de dados já é possível observar uma direção; com ciclos completos de fechamento, carga e retenção, a previsão fica mais representativa.

Uma aproximação simples é:

dias até o limite = espaço disponível / crescimento médio diário

Esse cálculo só é útil se o crescimento médio for calculado para o mesmo padrão de carga. Um mês com fechamento contábil não deve ser tratado como uma semana normal. Também vale calcular cenários: média, maior crescimento observado e crescimento do último período.

Se há 300 GB livres e o crescimento recente varia entre 8 e 12 GB por dia, o prazo não é simplesmente 37 dias. O cenário conservador usa o ritmo maior e ainda reserva espaço para backups, arquivos temporários, operações de manutenção e margem de segurança. A decisão precisa considerar o que mais usa o volume.

O log cheio tem outra causa

O arquivo de log não deve ser reduzido como rotina. Se ele cresce continuamente, a primeira pergunta é por que o truncamento não está ocorrendo. Em recovery model FULL, o banco precisa de backups de log regulares; sem eles, uma transação longa, uma réplica atrasada ou uma operação de manutenção pode manter o log ativo.

Para observar o motivo do log reutilizável estar bloqueado:

SQL
SELECT    name,    recovery_model_desc,    log_reuse_wait_descFROM sys.databasesWHERE state_desc = 'ONLINE';

LOG_BACKUP aponta para a cadeia de backups. ACTIVE_TRANSACTION pede investigação de uma transação aberta. AVAILABILITY_REPLICA ou causas ligadas à replicação indicam que reduzir o arquivo não corrige o mecanismo que está segurando o log. Liberar espaço sem tratar a causa apenas adia a próxima ocorrência.

O tempdb exige outra leitura

O tempdb é compartilhado por sessões, consultas, version store e operações internas. Um crescimento pontual pode ser legítimo; crescimento recorrente no mesmo horário pode indicar uma consulta que ordena ou faz hash além do esperado, uma transação longa mantendo versões ou uma configuração que não acompanha a carga.

O diagnóstico deve registrar qual arquivo cresceu, quando cresceu e quais sessões estavam ativas. A pergunta não é apenas “quanto o tempdb ocupa?”, mas “qual mecanismo fez essa ocupação aumentar e ele se repete?”. Aumentar o arquivo pode ser necessário para estabilizar a operação, mas não substitui encontrar a origem.

Um alerta que ajuda a decidir

Um alerta de capacidade precisa carregar contexto suficiente para permitir uma ação. Em vez de avisar apenas “disco em 80%”, ele deveria informar o volume, os bancos afetados, o crescimento dos últimos dias, a estimativa de prazo e a ação prevista.

O alerta também precisa diferenciar níveis. Um aviso de planejamento pode chegar durante o horário comercial; um alerta de risco imediato pode exigir intervenção. Se todos usam o mesmo canal e a mesma severidade, o time aprende a ignorar ambos.

Próximo passo

Prever espaço não é adivinhar o futuro. É manter histórico suficiente para enxergar a tendência, relacionar crescimento ao mecanismo que o produz e reservar capacidade antes da operação depender dela.

Se o ambiente já apresenta autogrowth frequente, log crescendo sem explicação ou alertas de disco sem prazo, um diagnóstico gratuito do SQL Server ajuda a separar risco de armazenamento, configuração e carga de trabalho.

← Todos os artigos

Falar no WhatsApp