Quando uma instância ApsaraDB RDS para SQL Server esgota o espaço em disco, o sistema a bloqueia automaticamente para evitar perda de dados. Após o bloqueio, todas as operações de gravação falham e o indicador de status de execução no console do RDS reflete o estado bloqueado.
O espaço de armazenamento pode se esgotar por três motivos:
Alto uso de arquivos de log — os logs de transação crescem continuamente devido a um grande volume de transações ou a transações individuais muito grandes.
Alto uso de arquivos de dados — os arquivos de dados do banco de dados acumulam espaço alocado que não é recuperado automaticamente após a exclusão de linhas.
Alto uso de arquivos temporários — o tempdb consome espaço em excesso.
Este tópico explica como identificar qual causa se aplica à sua instância e como resolvê-la.
Verificar o uso de espaço
Há dois métodos disponíveis. Use o Método 1 para uma visão geral visual rápida e o Método 2 para obter os tamanhos exatos dos arquivos por banco de dados.
Método 1: Visualizar a página de monitoramento
Na página de monitoramento da instância, verifique as seguintes métricas. Para mais detalhes, consulte Visualizar monitoramento padrão.
|
Métrica |
O que ela mede |
|
The size of consumed disk space |
Arquivos de dados e de log de todos os bancos de dados do usuário |
|
The data size |
Arquivos de dados (.mdf e .ndf) de todos os bancos de dados do usuário |
|
The size of consumed log space |
Arquivos de log (.ldf) de todos os bancos de dados do usuário |
|
Temporary file size |
Todos os arquivos .mdf, .ndf e .ldf do tempdb |
|
System file space usage |
Arquivos de dados e de log de master, msdb e model, além dos arquivos de sistema (logs de erro, arquivos DLL e similares) no diretório da instância SQL Server |
Método 2: Executar uma consulta SQL
Conecte-se à instância e execute instruções SQL para verificar o tamanho exato dos arquivos de dados (.mdf e .ndf) e dos arquivos de log (.ldf) em todos os bancos de dados. Para mais detalhes, consulte Como visualizo o tamanho de um banco de dados RDS para SQL Server e das tabelas nele contidas.
Resolver o bloqueio
Ao executar operações que envolvem riscos, como modifique configurações de instâncias ou dados, verifique as capacidades de recuperação de desastres e tolerância a falhas das instâncias para garantir a segurança dos dados.
Antes de modifique as configurações e os dados de instâncias, incluindo, entre outras, instâncias ECS e RDS, recomendamos crie snapshots ou ative o backup de log do RDS.
Se você tiver autorizado ou enviado informações de segurança, como conta de logon e senha, no Alibaba Cloud Management console, recomendamos modifique essas informações o quanto antes.
Aumentar o espaço de armazenamento
Aumentar o espaço de armazenamento desbloqueia a instância imediatamente. Consulte Alterar as especificações de uma instância ApsaraDB RDS para SQL Server para ver as etapas necessárias.
Se a instância já atingiu o limite máximo de armazenamento, envie um ticket para desbloqueá-la temporariamente enquanto você libera espaço.
Resolver alto uso de arquivos de log
Diagnosticar a causa
Conecte-se à instância e execute a seguinte consulta:
SELECT name, log_reuse_wait, log_reuse_wait_desc FROM sys.databases;
Se o valor de log_reuse_wait_desc for LOG_BACKUP, reduza o log de transação (veja a seguir).
**Reduzir o log de transação (quando log_reuse_wait_desc é LOG_BACKUP)**
Para reduzir o log de transação, siga as instruções em Como reduzo os logs de transação de uma instância ApsaraDB RDS para SQL Server.
Se o arquivo de log for muito grande, o backup levará mais tempo. Caso existam transações não confirmadas no momento da redução, uma única operação pode não recuperar todo o espaço. Execute a operação de redução novamente após a conclusão do backup.
Evitar recorrência: divida transações grandes
O crescimento acelerado do log é causado, quase sempre, por um grande volume de transações ou por transações individuais muito grandes. Por exemplo, se uma única transação atualiza 5 milhões de linhas, divida-a em 50 lotes de 100.000 linhas cada. Transações menores geram menos crescimento de log e permitem truncamentos mais frequentes.
Resolver alto uso de arquivos de dados
Os arquivos de dados não diminuem automaticamente quando linhas são excluídas — o espaço alocado permanece alocado. Identifique quais bancos de dados concentram espaço livre significativo e, em seguida, reduza-os seletivamente.
Etapa 1: Identificar bancos de dados com alto espaço livre
Execute a consulta a seguir em cada banco de dados para verificar quanto espaço está alocado mas não utilizado:
USE [$DB_Name];
SELECT
SUM(unallocated_extent_page_count) AS [free pages],
(SUM(unallocated_extent_page_count) * 1.0 / 128) AS [free space in MB]
FROM sys.dm_db_file_space_usage;
Substitua $DB_Name pelo nome do banco de dados de destino.
Etapa 2: Reduzir o banco de dados ou um arquivo específico
Para reduzir um banco de dados inteiro:
DBCC SHRINKDATABASE([$DB_Name]);
Para reduzir um único arquivo:
DBCC SHRINKFILE(file_id, [$Size]);
Substitua $Size pelo tamanho alvo após a redução (não pela quantidade a reduzir), em MB.
Resolver alto uso de arquivos temporários
Diagnosticar a causa
Na aba de monitoramento da instância, verifique o consumo de arquivos temporários. Quando o tempdb fica com pouco espaço, o erro correspondente também é registrado no log de erros.
Para um guia detalhado de solução de problemas, consulte a documentação da Microsoft sobre Como solucionar problemas de espaço em disco insuficiente no tempdb.
Resolução
Reinicie a instância para liberar o espaço dos arquivos temporários imediatamente.
Libere tabelas temporárias, versões de linha e variáveis de tabela no código da aplicação o quanto antes para evitar que o tempdb cresça desnecessariamente.
Escopo de aplicação
ApsaraDB RDS for SQL Server