Como posso solucionar problemas de consumo de armazenamento na minha instância de banco de dados do RDS para SQL Server?

7 minuto de leitura
0

Minha instância de banco de dados do Amazon Relational Database Service (Amazon RDS) para Microsoft SQL Server está usando mais espaço do que o esperado. Por que isso está acontecendo e como posso otimizar o armazenamento em disco?

Breve descrição

Você pode monitorar o espaço de armazenamento disponível para uma instância de banco de dados usando a métrica FreeStorageSpace no Amazon CloudWatch. O monitoramento frequente dessa métrica e a ativação do ajuste de escala automático de armazenamento ajudam a evitar que as instâncias fiquem sem armazenamento (estado de Armazenamento cheio).

No entanto, a métrica FreeStorageSpace não descreve como o mecanismo do SQL Server está consumindo o armazenamento disponível.

Resolução

Instâncias do Amazon RDS para SQL Server no estado Armazenamento cheio

Você não pode realizar operações básicas quando sua instância do RDS está presa no estado Armazenamento cheio. Para mais informações, consulte Como resolver problemas que ocorrem quando instâncias de banco de dados do Amazon RDS esgotam o armazenamento?

Algumas instâncias de banco de dados do RDS para SQL Server têm limitações para modificar o armazenamento. No console do Amazon RDS, a opção Armazenamento alocado estará desativada se sua instância de banco de dados não estiver qualificada para ser modificada. Para escalar o armazenamento em uma instância quando a opção de modificação não estiver disponível, migre seus dados usando backup nativo e restaure em uma nova instância. Certifique-se de que a nova instância tenha IOPS provisionadas ou tenha o tipo de armazenamento de uso geral (SSD). Ou use uma ferramenta de migração de dados para migrar para a nova instância. Para mais informações, consulte Modificar uma instância de banco de dados Amazon RDS.

Use o seguinte comando da AWS Command Line Interface (AWS CLI) para retornar as opções de armazenamento válidas para sua instância de banco de dados:

describe-valid-db-instance-modifications

Observação: o armazenamento de escala e o ajuste de escala automático do armazenamento não são compatíveis no RDS para instâncias do SQL Server que usam armazenamento magnético.

Para instâncias que têm o ajuste de escala automático do armazenamento ativado, o armazenamento é estendido somente em determinados cenários. Para mais informações, consulte Gerenciar a capacidade automaticamente com o dimensionamento automático de armazenamento do Amazon RDS. Além disso, o armazenamento será estendido somente se o limite máximo de armazenamento não for igual ou superior ao incremento de armazenamento. Para mais informações, consulte Limitações.

Consumo de armazenamento para instâncias do RDS para SQL Server

Para coletar informações detalhadas sobre o uso do espaço físico em disco para uma instância de banco de dados SQL Server, execute uma consulta semelhante à seguinte:

SELECT D.name AS [database_name]
    , F.name AS [file_name]
    , F.type_desc AS [file_type]
    , CONVERT(decimal(10,2), F.size * 0.0078125) AS [size_on_disk_mb]
    , CONVERT(decimal(10,2), F.max_size * 0.0078125) AS [max_size_mb]
FROM sys.master_files AS F
INNER JOIN sys.databases AS D
    ON F.database_id = D.database_id;

Os arquivos contendo ROWS incluem dados, e os arquivos contendo LOGS representam transações em andamento.

**Observação:**a exibição do sistema sys.master_files mostra o tamanho de inicialização do tempdb. Ela não reflete o tamanho atual de tempdb. Execute a consulta a seguir para verificar o tamanho atual de tempdb:

select name AS [database_name],
physical_name AS [file_name],
convert(decimal(10,2),size*0.0078125) AS [size_on_disk_mb]
from tempdb.sys.database_files;

Antes de otimizar o armazenamento, certifique-se de entender como o mecanismo do SQL Server o utiliza. O armazenamento do mecanismo do SQL Server é amplamente definido usando as seguintes categorias:

Arquivos de banco de dados

É possível dividir o armazenamento total usado por um banco de dados individual em linha, índice e espaço livre no banco de dados ativo no momento. Para fazer isso, execute uma consulta semelhante à seguinte:

EXEC sp_spaceused;

Arquivos de log de transações

Para determinar a quantidade de armazenamento usada pelos logs de transações, execute a seguinte consulta:

DBCC SQLPERF(LOGSPACE)

Você pode esperar espaço livre nos logs de transações, mas pode desalocar espaço livre excessivo seguindo a documentação da Microsoft para DBCC SHRINKFILE.

Você pode reduzir a alocação excessiva de espaço livre para logs de transações usando as opções de arquivo e grupo de arquivos ALTER DATABASE (transact-SQL). As opções definem as configurações de crescimento automático do banco de dados.

Banco de dados temporário (tempdb)

O tempdb do SQL Server cresce automaticamente. Se o tempdb estiver consumindo uma grande quantidade de armazenamento disponível, você poderá reduzir o banco de dados tempdb.

Observação: se você reduzir um banco de dados database, verifique a guia Mensagem no SQL Server Management Studio (SSMS) para ver as mensagens de erro depois de executar o comando. Se você receber uma mensagem de erro DBCC SHRINKFILE: A página não pôde ser movida porque é uma página de tabela de trabalho, consulte a documentação da Microsoft para DBCC FREESYSTEMCACHE e DBCC FREEPROCCACHE. Você também pode reinicializar a instância de banco de dados para limpar tempdb.

As instâncias de banco de dados com o status Armazenamento cheio podem não conseguir reinicializar. Se isso ocorrer, aumente o armazenamento alocado para sua instância de banco de dados e reinicialize. Para mais informações, consulte Como resolver problemas que ocorrem quando instâncias de banco de dados do Amazon RDS esgotam o armazenamento?

Índices de banco de dados

Se você estiver dedicando uma parte significativa do armazenamento disponível aos índices, talvez consiga conservar algum espaço por meio do ajuste de índice. Você pode coletar informações detalhadas sobre o uso de índices executando a exibição de gerenciamento dinâmico sys.dm_db_index_usage_stats. Isso pode ajudar você a avaliar as prioridades de ajuste.

Arquivos de rastreamento

Arquivos de rastreamento, incluindo arquivos de Trilha de auditoria C2 e arquivos de despejo, podem consumir muito espaço em disco. O Amazon RDS exclui automaticamente arquivos de rastreamento e despejo com mais de 7 dias, mas você também pode ajustar as configurações de retenção dos seus arquivos de rastreamento. Para mais informações, consulte Definir o período de retenção para arquivos de rastreamento e despejo.

Espaço consumido pela integração com o Amazon S3

Se você integrou sua instância de banco de dados RDS com o Amazon S3, pode ter carregado arquivos no seu drive D: que estão ocupando espaço. Para verificar quanto espaço está sendo consumido pela sua integração com o S3, execute um comando para listar os arquivos na sua instância de banco de dados. Para mais informações, consulte Listar arquivos na instância de banco de dados do RDS.

CDC

Para bancos de dados que têm o CDC ativado, o tamanho do arquivo de log aumenta dependendo da frequência das alterações nas tabelas ou bancos de dados de origem. Eventualmente, o armazenamento pode acabar. Se o disco de log ficar cheio, o CDC não poderá processar mais transações.

Auditoria

Se a auditoria não estiver configurada corretamente, por exemplo, os logs podem crescer exponencialmente e afetar o armazenamento. Para mais informações, consulte Usar a auditoria do SQL Server.

O modo de auditoria C2 salva uma grande quantidade de informações do evento no arquivo de log. O arquivo de log pode crescer rapidamente e colocar a instância no estado Armazenamento cheio. Para obter mais informações, consulte a opção de configuração do servidor do modo de auditoria C2 na documentação da Microsoft.

Além disso, ativar recursos como o repositório de consultas também pode afetar a utilização de recursos.


Informações relacionadas

Amazon RDS para Microsoft SQL Server

Monitorar métricas em uma instância do Amazon RDS

Instância de banco de dados do Amazon RDS ficando sem espaço de armazenamento

Migrar bancos de dados do Microsoft SQL Server para a Nuvem AWS