Come posso risolvere i problemi di consumo di spazio di archiviazione nella mia istanza DB RDS per SQL Server?

6 minuti di lettura
0

La mia istanza DB di Amazon Relational Database Service (Amazon RDS) per Microsoft SQL Server utilizza più spazio del previsto. Perché si sta verificando questo problema e come posso ottimizzare l'archiviazione su disco?

Breve descrizione

È possibile monitorare lo spazio di archiviazione disponibile per un'istanza DB utilizzando il parametro FreeStorageSpace in Amazon CloudWatch. Il monitoraggio frequente di questo parametro e l'attivazione del dimensionamento automatico dello spazio di archiviazione aiutano a prevenire l'esaurimento dello spazio di archiviazione delle istanze (stato Storage esaurito).

Tuttavia, il parametro FreeStorageSpace non descrive in che modo il motore di SQL Server consuma lo spazio di archiviazione disponibile.

Risoluzione

Istanze Amazon RDS per SQL Server nello stato Storage esaurito

Non è possibile eseguire operazioni di base quando l'istanza RDS è bloccata nello stato Storage esaurito. Per maggiori informazioni, consulta How do I resolve problems that occur when Amazon RDS DB instances run out of storage?

Alcune istanze DB di RDS per SQL Server presentano limitazioni per la modifica dello spazio di archiviazione. Nella console Amazon RDS, l'opzione Storage assegnato è disattivata se l’istanza DB non può essere modificata. Per dimensionare lo spazio di archiviazione su un'istanza quando l'opzione di modifica non è disponibile, è necessario migrare i dati utilizzando Backup nativo e ripristino su una nuova istanza. Assicurati che la nuova istanza abbia capacità di IOPS allocata o il tipo di spazio di archiviazione per uso generico (SSD). In alternativa, utilizza uno strumento di migrazione dei dati per migrare alla nuova istanza. Per maggiori informazioni, consulta Modifying an Amazon RDS DB instance.

Il seguente comando dell'Interfaccia della linea di comando AWS (AWS CLI) restituisce le opzioni di archiviazione valide per la tua istanza DB:

describe-valid-db-instance-modifications

**Nota:**il dimensionamento dello spazio di archiviazione e il dimensionamento automatico dello spazio di archiviazione non sono supportati nelle istanze RDS per SQL Server che utilizzano l'archiviazione magnetica.

Nelle istanze in cui è attivato il dimensionamento automatico dello spazio di archiviazione, lo spazio di archiviazione viene esteso solo in determinati scenari. Per maggiori informazioni, consulta Managing capacity automatically with Amazon RDS storage autoscaling. Inoltre, lo spazio di archiviazione viene esteso solo se la soglia massima di archiviazione non è uguale o superiore all'incremento dello spazio di archiviazione. Per maggiori informazioni, consulta Limitazioni.

Consumo di spazio di archiviazione per istanze RDS per SQL Server

Per raccogliere informazioni dettagliate sull'utilizzo dello spazio fisico su disco per un'istanza DB di SQL Server, esegui una query simile alla seguente:

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;

I file contenenti ROWS includono dati mentre i file contenenti LOG rappresentano transazioni in transito.

**Nota:**la vista di sistema sys.master\ _files mostra la dimensione di avvio di tempdb. Non riflette la dimensione attuale di tempdb. Esegui la seguente query per verificare la dimensione attuale di 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;

Prima di ottimizzare lo spazio di archiviazione, assicurati di aver compreso in che modo il motore di SQL Server utilizza lo spazio di archiviazione. Lo spazio di archiviazione del motore di SQL Server è definito utilizzando le seguenti categorie:

File di database

È possibile suddividere lo spazio di archiviazione totale utilizzato da un singolo database in riga, indice e spazio libero nel database attivo corrente. A tale scopo, esegui una query simile alla seguente:

EXEC sp_spaceused;

File di log delle transazioni

Per determinare la quantità di spazio di archiviazione utilizzata dai log delle transazioni, esegui la seguente query:

DBCC SQLPERF(LOGSPACE)

È probabile che i log delle transazioni contengano spazio libero, tuttavia è possibile riassegnare lo spazio libero eccessivo seguendo le istruzioni fornite nella documentazione Microsoft per DBCC SHRINKFILE.

È anche possibile ridurre lo spazio libero assegnato ai log delle transazioni utilizzando il file ALTER DATABASE (transact-SQL) e le opzioni di filegroup. Le opzioni consentono di configurare le impostazioni di crescita automatica del database.

Database temporaneo (tempdb)

Il tempdb di SQL Server cresce automaticamente. Se il tempdb consuma una quantità eccessiva di spazio di archiviazione, è possibile ridurre le sue dimensioni.

Nota: se riduci le dimensioni di un tempdb, dopo avere eseguito il comando controlla eventuali messaggi di errore nella scheda Messaggio in SQL Server Management Studio (SSMS). Se viene visualizzato il messaggio di errore DBCC SHRINKFILE: Page could not be moved because it is a work table page, consulta la documentazione Microsoft per DBCC FREESYSTEMCACHE e DBCC FREEPROCCACHE. Puoi anche riavviare l'istanza DB per cancellare il tempdb.

Le istanze DB con stato Storage esaurito potrebbero non essere in grado di riavviarsi. In tal caso, aumenta lo spazio di archiviazione assegnato all'istanza DB e riavvia. Per maggiori informazioni, consulta How do I resolve problems that occur when Amazon RDS DB instances run out of storage?

Indici del database

Se dedichi una parte significativa dello spazio di archiviazione disponibile agli indici, potresti riuscire a risparmiare spazio ottimizzando gli indici. È possibile raccogliere informazioni dettagliate sull'utilizzo dell'indice eseguendo la vista di gestione dinamica sys.dm_db_index_usage_stats. Queste informazioni possono aiutare a valutare le priorità di gestione.

File di traccia

I file di traccia, compresi i file C2 Audit Trace e i file di dump, possono consumare molto spazio su disco. Amazon RDS elimina automaticamente i file di traccia e di dump più vecchi di 7 giorni, ma è anche possibile modificare le relative impostazioni. Per maggiori informazioni, consulta Setting the retention period for trace and dump files.

Spazio consumato dall'integrazione con Amazon S3

Se hai integrato l'istanza DB RDS con Amazon S3, potresti aver caricato sull'unità D: dei file che occupano spazio. Per verificare lo spazio consumato dall’integrazione S3, esegui un comando per elencare i file nell’istanza DB. Per maggiori informazioni, consulta Listing files on the RDS DB instance.

CDC

Per i database in cui è attivato CDC, la dimensione del file di log aumenta in base alla frequenza delle modifiche alle tabelle o ai database di origine. Col tempo, lo spazio di archiviazione potrebbe esaurirsi. Se il disco di log si riempie, CDC non potrà elaborare ulteriori transazioni.

Audit

Se l’audit non è configurato correttamente, i log potrebbero crescere in modo esponenziale e influire sullo spazio di archiviazione. Per maggiori informazioni, consulta Using SQL Server Audit.

La modalità audit C2 salva nel file di log una grande quantità di informazioni sugli eventi. Il file di log potrebbe crescere rapidamente e mettere l'istanza nello stato Storage esaurito. Per maggiori informazioni, consulta C2 audit mode server configuration option nella documentazione Microsoft.

Inoltre, l'attivazione di funzionalità come l'archiviazione delle query potrebbe influire sull'utilizzo delle risorse.


Informazioni correlate

Amazon RDS for Microsoft SQL Server

Monitoring metrics in an Amazon RDS instance

Amazon RDS DB instance running out of storage

Migrating Microsoft SQL Server databases to the AWS Cloud