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. |
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.

-
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.

-
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_helpdbArmazenamento total de cada banco de dados (arquivos de dados + arquivos de log)
sp_spaceusedNome, 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 SHOWFILESTATSArmazenamento de dados total e utilizado para o banco de dados atual
SELECT * FROM sys.master_filesTamanho total dos arquivos de dados e arquivos de log em todos os bancos de dados
SELECT * FROM sys.dm_db_log_space_usageArmazenamento de log total e utilizado para o banco de dados atual (SQL Server 2012 ou posterior)
SELECT * FROM sys.dm_db_file_space_usageArmazenamento 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âmetroONLINEcomoONpara 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, consultesys.dm_db_index_physical_statsno modoSAMPLEDouDETAILEDe verifique a colunaavg_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 = ONpara permitir acesso simultâneo.ImportanteA 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.

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
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';
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.

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 |
Causa |
Ação |
|
|
Nenhum bloqueio. O truncamento do log pode prosseguir normalmente. |
Nenhuma. |
|
|
É 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. |
|
|
Um backup de log deve ser concluído antes do truncamento. |
Aguarde a conclusão do backup de log agendado. |
|
|
Uma transação de longa duração ou aberta está retendo o log. |
Identifique e confirme ou reverta a transação. |
|
|
O log está aguardando a sincronização do espelho. |
Verifique a integridade do espelhamento do banco de dados. |
|
|
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
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 |
Após a redução, acesse a página Monitoring and Alerts e verifique se o uso de armazenamento de log diminuiu.

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
-
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.

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.