Todos os produtos
Search
Central de documentação

ApsaraDB RDS:RDS SQL Server disk space full issue

Última atualização: Jun 26, 2026

Use este guia para identificar qual tipo de arquivo está consumindo armazenamento na sua instância do ApsaraDB RDS for SQL Server, recuperar espaço disponível e expandir a capacidade quando necessário.

Conceitos principais

Compreender a diferença entre armazenamento alocado e utilizado é um pré-requisito para avaliar cada método de recuperação descrito neste guia.

Quantidade

Definição

Espaço de dados utilizado

Armazenamento que realmente contém linhas de dados e páginas de índice. Aumenta em inserções e diminui em exclusões.

Espaço de dados alocado

Armazenamento formatado e reservado para um arquivo de banco de dados. Uma vez alocado, não é reduzido automaticamente, mesmo após exclusões.

Espaço de dados alocado, mas não utilizado

A diferença entre o espaço alocado e o utilizado. Esta é a quantidade máxima que a redução de arquivos de dados pode recuperar.

Armazenamento não alocado

Extents (64 KB cada) ainda não atribuídos a nenhum objeto de banco de dados. A redução de um arquivo de dados libera esse espaço de volta para o sistema operacional.

Importante

Se a sua carga de trabalho de dados cresce continuamente, a porção não alocada costuma ser pequena. A redução de arquivos de dados recupera apenas o armazenamento não alocado. Otimize e recupere primeiro o armazenamento alocado, mas não utilizado.

Verificar o uso de armazenamento

Existem quatro métodos para visualizar o uso de armazenamento; selecione aquele que melhor atende à sua necessidade.

  • Método 1 — Página Basic Information: Faça login no console do ApsaraDB RDS e acesse a página Basic Information. A seção Usage Statistics mostra apenas o uso geral de armazenamento, sem detalhamento por tipo de arquivo ou dados históricos.

    基本信息

  • Método 2 — Monitoring and Alerts: Acesse a página Monitoring and Alerts e abra a aba Standard Monitoring. Esta visualização mostra o uso de armazenamento atual e histórico, detalhado por arquivos de dados, arquivos de log, arquivos temporários e arquivos de sistema. Para mais detalhes, consulte visualize informações de monitoramento padrão.

    image

  • Método 3 — Autonomy Services > Storage Management: No painel de navegação à esquerda, escolha Autonomy Services > Storage Management. Esta tela exibe a porcentagem de uso de armazenamento de dados e logs, tendências de consumo, além dos 10 principais bancos de dados e das 20 principais tabelas que mais consomem armazenamento. Para mais detalhes, consulte Gerenciamento de armazenamento.

    Esta opção não está disponível para instâncias que executam o SQL Server 2008 R2 com discos em nuvem.

    image

  • Método 4 — SQL Server Management Studio (SSMS): Conecte-se à sua instância usando o SSMS ou outra ferramenta cliente e execute os seguintes comandos do sistema. Para instruções de conexão, consulte Conectar-se a uma instância do ApsaraDB RDS for SQL Server usando o SSMS.

    Comando

    O que relata

    sp_helpdb

    Armazenamento total de cada banco de dados (arquivos de dados + arquivos de log)

    sp_spaceused

    Nome, armazenamento utilizado e armazenamento não alocado do banco de dados atual

    DBCC SQLPERF(LOGSPACE)

    Armazenamento de log total e utilizado para cada banco de dados

    DBCC SHOWFILESTATS

    Armazenamento de dados total e utilizado para o banco de dados atual

    SELECT * FROM sys.master_files

    Tamanho total dos arquivos de dados e arquivos de log em todos os bancos de dados

    SELECT * FROM sys.dm_db_log_space_usage

    Armazenamento de log total e utilizado para o banco de dados atual (SQL Server 2012 ou posterior)

    SELECT * FROM sys.dm_db_file_space_usage

    Armazenamento de dados total e utilizado para o banco de dados atual (SQL Server 2012 ou posterior)

Se o uso de armazenamento estiver anormalmente alto, acesse a página Monitoring and Alerts e verifique a aba Standard Monitoring para identificar qual tipo de arquivo é a origem. Em seguida, siga a seção correspondente abaixo.

Recuperar armazenamento de dados

Arquivar dados históricos

Para liberar espaço, exclua, migre para outra instância do RDS ou arquive dados históricos que não são mais consultados com frequência. Isso reduz o total de dados armazenados na instância.

Este método é eficaz para reduzir o crescimento a longo prazo, mas exige alterações na lógica da aplicação e a colaboração de arquitetos e desenvolvedores.

Ative a compactação de dados

A compactação de dados está disponível para:

  • SQL Server 2016 ou posterior

  • SQL Server Enterprise Edition anterior ao SQL Server 2016

A compactação suporta compactação de linha e de página, podendo ser aplicada a tabelas, índices ou partições individuais. A taxa de compactação varia de 10% a 90%, dependendo do esquema, dos tipos de dados das colunas e da distribuição de valores.

Use a stored procedure sp_estimate_data_compression_savings para estimar quanto espaço a compactação economizará em uma tabela ou índice específico antes de ativá-la.

Ativar ou alterar a compactação exige operações de linguagem de definição de dados (DDL), que bloqueiam a tabela durante a execução. Execute essas operações em horários de menor movimento.
No SQL Server Enterprise Edition, defina o parâmetro ONLINE como ON para evitar o bloqueio prolongado da tabela.
A compactação de dados aumenta a sobrecarga da CPU; ative a compactação apenas em tabelas grandes, onde a economia de armazenamento justifique o custo de CPU.

Para mais detalhes, consulte a documentação da Microsoft sobre Compactação de dados.

Desfragmentar índices

A alta fragmentação de índices faz com que o índice consuma mais armazenamento do que seus dados reais exigem. A desfragmentação recupera esse espaço alocado em excesso.

Para analisar, visualize a fragmentação de índices: No painel de navegação à esquerda, escolha Autonomy Services > Performance Optimization e clique na aba Index Usage. Esta aba mostra os níveis de fragmentação por tabela e sugestões para recriar ou reorganizar índices específicos.

A taxa de fragmentação mede a porcentagem de páginas cuja ordem lógica não corresponde à sua ordem física, e não a porcentagem de espaço vazio por página. Para analisar o espaço ocioso médio por página, consulte sys.dm_db_index_physical_stats no modo SAMPLED ou DETAILED e verifique a coluna avg_page_space_used_in_percent . Consulte sys.dm_db_index_physical_stats (Transact-SQL) .

Para decidir, selecione o método com base no nível de fragmentação:

  • Recriar (alta fragmentação): Produz melhores resultados e reorganiza o armazenamento de forma mais completa. Por padrão, a tabela é bloqueada durante a recriação. No SQL Server Enterprise Edition, defina ONLINE = ON para permitir acesso simultâneo.

    Importante

    A recriação de um índice pode causar um aumento significativo e de curto prazo tanto no armazenamento de dados quanto no tamanho do log. Reserve pelo menos o dobro do tamanho do índice que está sendo recriado como armazenamento disponível antes de começar. Verifique o espaço disponível na página Basic Information em Instance Resources.

    ALTER INDEX <IX_YourIndexName> ON <YourTableName> REBUILD WITH (ONLINE = ON);

    Após a conclusão da recriação, o console atualiza os dados de fragmentação de forma assíncrona. Clique em Recollect para obter os dados mais recentes imediatamente e, em seguida, clique em Export Script e baixe e salve os resultados para verificação.

    image

  • Reorganizar (baixa fragmentação): Menos intrusivo que uma recriação, mas também menos eficaz. Use esta opção quando a fragmentação for baixa e você não puder aceitar um bloqueio de tabela.

Execute as operações de desfragmentação em horários de menor movimento. A leitura de muitas páginas de índice durante uma operação de desfragmentação pode degradar o desempenho das consultas.

Reduzir arquivos de dados

Aviso

A redução de arquivos de dados recupera apenas o armazenamento não alocado. Se a sua carga de trabalho fizer os arquivos crescerem novamente até o mesmo tamanho, a redução desperdiça tempo e gera registros de log de transações desnecessários. Reduza os arquivos de dados apenas quando o espaço não alocado for significativo e os dados que o causaram não retornarem.

Antes da redução, crie uma linha de base. Execute a seguinte consulta para registrar os tamanhos atuais dos arquivos. Execute-a novamente após a redução e confirme o resultado.

SELECT
    file_id,
    name,
    CAST(FILEPROPERTY(name, 'SpaceUsed') AS bigint) * 8 / 1024.0 AS space_used_mb,
    CAST(size AS bigint) * 8 / 1024.0 AS space_allocated_mb
FROM sys.database_files
WHERE type_desc = 'ROWS';
Importante

A redução de muitos arquivos de dados ao mesmo tempo gera um grande volume de logs de transações e pode bloquear os serviços por um período prolongado. Reduza em pequenos incrementos usando o Método 1.

Método 1 — Redução em lotes (recomendado): Reduza 5 GB por vez para limitar o impacto nos logs de transações e na disponibilidade do serviço.

DECLARE @dbName NVARCHAR(128) = 'YourDatabaseName'  -- Database name
DECLARE @fileName NVARCHAR(128)  -- Data file name
DECLARE @targetSize INT = 1024   -- Target size (MB)
DECLARE @shrinkSize INT = 5120   -- Amount to shrink per iteration (MB); 5 GB recommended
DECLARE @currentSize INT         -- Current size
DECLARE @sql NVARCHAR(500)
DECLARE @waitTime INT = 10       -- Wait time between iterations (seconds)

-- Get the data file name
SELECT @fileName = name
FROM sys.master_files
WHERE database_id = DB_ID(@dbName)
AND type_desc = 'ROWS'

-- Shrink in a loop
WHILE 1 = 1
BEGIN
    -- Get current file size
    SELECT @currentSize = size/128
    FROM sys.database_files
    WHERE name = @fileName

    -- Stop when the target size is reached
    IF @currentSize <= @targetSize
    BEGIN
        PRINT 'Shrink complete, current size: ' + CAST(@currentSize AS VARCHAR(20)) + 'MB'
        BREAK
    END

    -- Calculate the new target for this iteration
    DECLARE @newSize INT = @currentSize - @shrinkSize
    IF @newSize < @targetSize
        SET @newSize = @targetSize

    -- Run the shrink
    SET @sql = 'DBCC SHRINKFILE (N''' + @fileName + ''', ' + CAST(@newSize AS VARCHAR(20)) + ')'
    PRINT 'Executing shrink: ' + @sql
    EXEC (@sql)

    -- Wait before the next iteration
    PRINT 'Waiting ' + CAST(@waitTime AS VARCHAR(10)) + ' seconds before continuing...'
    WAITFOR DELAY '00:05:00'
END

Método 2 — Reduzir um único arquivo: Execute DBCC SHRINKFILE diretamente para reduzir um arquivo de dados para um tamanho alvo.

DBCC SHRINKFILE(<File ID>, <Expected file size after shrink in MB>)

Antes de executar este comando, verifique quanto espaço está alocado em relação ao utilizado. O tamanho alvo mínimo é o espaço alocado, não o espaço utilizado. Por exemplo, se sys.database_files mostrar um total de 1.673.344 páginas e 1.313.432 páginas alocadas, o tamanho do extent é de 64 KB:

  • Tamanho total: (1.673.344 x 64) / 1.024 = 104.584 MB

  • Alvo mínimo (alocado): (1.313.432 x 64) / 1.024 = 82.089,5 MB

Para reduzir para 90.000 MB:

DBCC SHRINKFILE(1, 90000)

案例

Para referência, consulte Reduzir um banco de dados e DBCC SHRINKFILE (Transact-SQL).

Perguntas frequentes

Após executar uma recriação de índice em um índice com alta fragmentação, por que a taxa de fragmentação na aba Index Usage permanece inalterada?

O console atualiza os dados de fragmentação de forma assíncrona após uma recriação, isso é esperado. Clique em Recollect para acionar uma coleta de dados imediata. Após a conclusão, clique em Export Script para baixar os resultados e verifique se a fragmentação diminuiu.

image

Recuperar armazenamento de log

Verificar por que o espaço de log não pode ser recuperado

Execute DBCC SQLPERF(LOGSPACE) ou verifique a página Storage Management para ver a porcentagem de armazenamento de log utilizado. Se a porcentagem for alta, a redução dos arquivos de log não terá quase nenhum efeito. O problema é que o espaço de log ainda não pode ser truncado, e não que o arquivo de log é muito grande.

Consulte sys.databases para descobrir o que está bloqueando o truncamento:

SELECT name, log_reuse_wait, log_reuse_wait_desc
FROM sys.databases;

**Valor de log_reuse_wait_desc**

Causa

Ação

NOTHING

Nenhum bloqueio. O truncamento do log pode prosseguir normalmente.

Nenhuma.

CHECKPOINT

É necessário um checkpoint antes do truncamento.

Nenhuma ação necessária, a menos que isso persista. Se persistir, entre em contato com o suporte.

LOG_BACKUP

Um backup de log deve ser concluído antes do truncamento.

Aguarde a conclusão do backup de log agendado.

ACTIVE_TRANSACTION

Uma transação de longa duração ou aberta está retendo o log.

Identifique e confirme ou reverta a transação.

DATABASE_MIRRORING

O log está aguardando a sincronização do espelho.

Verifique a integridade do espelhamento do banco de dados.

REPLICATION

O log está aguardando a replicação consumir os registros.

Verifique o status do agente de replicação.

Para a lista completa de valores, consulte sys.databases (Transact-SQL).

Reduzir logs de transações

Aviso

Se a sua instância exibir um erro de "transaction log is full", você não poderá reduzir os logs de transações pelo console. A execução manual de instruções SQL para resolver isso envolve riscos. Consulte Soluções para espaço de log insuficiente (apenas situações de emergência). Quando o espaço de log estiver criticamente baixo, expanda a capacidade do disco primeiro.

Não reduza os logs de transações como uma operação de manutenção de rotina. Os arquivos de log que crescem devido à atividade normal do negócio simplesmente crescerão novamente após a redução.

Para prosseguir, selecione o método com base na sua situação:

Método 1: Banco de dados único (sem backup)

Método 2: Backup no nível da instância + redução

Escopo

Banco de dados único

Toda a instância

Backup

Nenhum

O sistema faz backup de todos os logs de transações automaticamente primeiro

Velocidade

Rápido

Lento — o backup é executado antes da redução

Quando usar

Logs crescendo rapidamente; é necessário recuperar espaço antes do próximo backup agendado

Necessária otimização global de logs em toda a instância. Note que a redução dos logs de transações por si só ocupa uma quantidade específica de armazenamento de log.

Impacto em outros bancos de dados

Nenhum

Toda a instância é afetada

Procedimento

Reduzir logs de transações do banco de dados

Fazer backup e reduzir logs de transações

Após a redução, acesse a página Monitoring and Alerts e verifique se o uso de armazenamento de log diminuiu.

image

Recuperar armazenamento de arquivos temporários

Como o tempdb cresce

O armazenamento de arquivos temporários é o espaço utilizado pelo banco de dados do sistema tempdb. O tempdb usa apenas o modelo de recuperação SIMPLE, portanto, seus arquivos de log permanecem pequenos. No entanto, os arquivos de dados do tempdb podem crescer rapidamente quando as consultas criam muitas tabelas temporárias, unem tabelas grandes ou ordenam grandes conjuntos de dados.

Reduzir o uso do tempdb

  • No nível da aplicação: reduza tabelas temporárias desnecessárias, evite junções de tabelas grandes sempre que possível e divida transações grandes em menores.

  • Reinicie a instância do RDS em horários de menor movimento. Após uma reinicialização, o tempdb retorna ao tamanho que tinha quando a instância foi criada pela primeira vez.

Recuperar armazenamento de outros arquivos

O que conta como armazenamento de outros arquivos

O armazenamento de outros arquivos inclui o espaço utilizado por sqlserver.other_size, mastersize, modelsize, msdbsize e arquivos de sistema semelhantes. Esses arquivos normalmente são pequenos, mas podem crescer em duas situações:

  • Muitos arquivos errorlog se acumularam e cresceram para vários GB ou mais.

  • Arquivos de despejo de memória foram gerados durante uma exceção grave.

Reduzir o armazenamento de outros arquivos

  1. Acesse a página Monitoring and Alerts e abra a aba Standard Monitoring para visualizar quanto espaço cada tipo de arquivo está consumindo. Para descrições das métricas, consulte visualize informações de monitoramento padrão.

    image

  2. Se os arquivos errorlog estiverem consumindo um espaço significativo, limpe-os na página Log Management. Para mais detalhes, consulte gerencie logs.

Se sqlserver.other_size ou outros arquivos de sistema estiverem consumindo uma quantidade de espaço inesperadamente grande, entre em contato com o helpdesk. Eles ajudarão a identificar a causa raiz.

Expandir a capacidade de armazenamento

Se o uso de armazenamento permanecer criticamente alto após a aplicação dos métodos acima, expanda a capacidade de armazenamento da instância. Para mais detalhes, consulte Alterar especificações da instância.