Salta al contenuto

Perché la mia istanza database Amazon RDS per MySQL utilizza più spazio di archiviazione del previsto?

5 minuti di lettura
0

Desidero sapere perché la mia istanza database Amazon Relational Database Service (Amazon RDS) per MySQL utilizza più spazio del previsto. Desidero anche ottimizzare l'archiviazione su disco.

Risoluzione

Per monitorare lo spazio di archiviazione disponibile per un'istanza database Amazon RDS, puoi utilizzare la metrica FreeStorageSpace di Amazon CloudWatch. Tuttavia, la metrica FreeStorageSpace non mostra cosa utilizza lo spazio di archiviazione nell'istanza database. Per determinare cosa utilizza lo spazio di archiviazione e recuperarlo, utilizza i seguenti metodi.

Esegui OPTIMIZE TABLE

Le tabelle utilizzano solo spazio che non viene utilizzato attivamente. Tuttavia, Amazon RDS alloca comunque spazio alle tabelle. Se hai attivato innodb_file_per_table, puoi eseguire il comando OPTIMIZE TABLE per recuperarlo. Per ulteriori informazioni, consulta OPTIMIZE TABLE statement (Istruzione OPTIMIZE TABLE) sul sito web di MySQL.

Puoi utilizza OPTIMIZE TABLE per tabelle InnoDB, MyISAM e ARCHIVE. OPTIMIZE TABLE funziona quando crei la tabella in un tablespace separato in base all'impostazione di configurazione innodb_file_per_table predefinita di Amazon RDS. Per ulteriori informazioni, consulta File-per-table tablespaces (Tablespace file-per-table) sul sito web di MySQL.

Amazon RDS accetta il comando OPTIMIZE TABLE, ma in realtà esegue il comando ALTER TABLE...FORCE. In questo caso, ricevi un messaggio di avviso simile al seguente:

"Table does not support optimize, doing recreate + analyze instead."

Aggiorna le statistiche, quindi esegui questa query information_schema.tables per stimare l'utilizzo dello spazio di archiviazione sulla base delle statistiche aggiornate:

SELECT    table_name,
    data_length,
    max_data_length,
    index_length,
    data_free
FROM
    information_schema.tables
WHERE table_schema='schema_name'
;

Nota: nella query precedente, aggiungi i valori per il caso d'uso.

La colonna data_free mostra la quantità di spazio disponibile allocato a una tabella ma non utilizzato attivamente.

Riduci lo spazio di archiviazione delle tabelle dell'applicazione

Per visualizzare lo spazio di archiviazione utilizzato dalle tabelle dell'applicazione su un'istanza database RDS MySQL, esegui questa query:

SELECT TABLESPACE_NAME,
ROUND(DATA_FREE/EXTENT_SIZE,0) FREE_DATA_MB,
 FREE_EXTENTS FREE_EXTENTS_MB, TOTAL_EXTENTS
TOTAL_EXTENTS_MB FROM
INFORMATION_SCHEMA.FILES;

Per individuare la tabella dell'applicazione più grande sull'istanza database RDS MySQL, esegui questa query:

SELECT TABLESPACE_NAME,  
ROUND(DATA_FREE/EXTENT_SIZE,0) FREE_DATA_MB,  
FREE_EXTENTS FREE_EXTENTS_MB,
TOTAL_EXTENTS  TOTAL_EXTENTS_MB FROM  
INFORMATION_SCHEMA.FILES
ORDER BY TOTAL_EXTENTS_MB DESC;

Nota: se un database include tabelle con colonne a lunghezza variabile più lunghe di 768 byte, non puoi calcolare singolarmente lo spazio di archiviazione utilizzato dal database e dalla tabella. Questa limitazione riguarda i comandi BLOB, TEXT, VARCHAR e VARBINARY.

Riduci lo spazio di archiviazione di un log binario

Se aggiungi una replica in lettura a un'istanza Amazon RDS, il log binario dell'istanza di origine utilizza spazio di archiviazione aggiuntivo. Per determinare la quantità di spazio di archiviazione utilizzata dal log binario nell'istanza di origine, verifica il parametro BinLogDiskUsage di CloudWatch. Se il log binario utilizza sempre più spazio di archiviazione, potrebbe essere necessario sincronizzare le repliche in lettura.

Riduci o disattiva l'archiviazione del log generale e del log query lente

Quando disattivi i parametri del log generale e del log query lente, l'istanza inizia ad archiviare i log e i backup dei log. Per ruotare i file e controllare l'utilizzo del disco, consulta mysql.rds_rotate_general_log e mysql.rds_rotate_slow_log.

Nota: è consigliabile disattivare il log generale e il log query lente se non servono per risolvere un problema.

Gestisci o riduci le dimensioni del tablespace di sistema InnoDB

Il tablespace di sistema inizia con 10 MB di spazio e contiene il dizionario dei dati InnoDB e lo spazio di annullamento. Dopo aver allocato lo spazio, il file è di almeno 10 MB e può utilizzare altro spazio di archiviazione disponibile.

Per impostazione predefinita, Amazon RDS imposta innodb_file_per_table su 1 in modo che il database archivi i dati per ogni tablespace nel suo file .ibd. Per recuperare spazio riutilizzabile per le tabelle correlate, utilizza OPTIMIZE TABLE per ridimensionare ogni file del tablespace della tabella. Oppure puoi eliminare una tabella.

Se imposti innodb_file_per_table su 0, Amazon RDS alloca tutte le tabelle al tablespace di sistema. Se elimini tabelle o indici, oppure se elimini o tronchi dati delle tabelle allocate nel sistema, il tablespace contrassegna lo spazio come riutilizzabile. Tuttavia, innodb_file_per_table non libera spazio per il file system.

Non puoi ridurre il tablespace di sistema nell'istanza in cui si trova. Per farlo, esporta i dati del database corrente importali in una nuova istanza. Per ridurre i tempi di inattività, configura la nuova istanza MySQL come replica dell'istanza Amazon RDS di origine. Quando la replica è sincronizzata con l'istanza Amazon RDS di origine, passa alla nuova istanza.

Nota: quando esegui il ripristino da uno snapshot o crei una replica in lettura, non recuperi spazio dal tablespace di sistema. Entrambi i metodi utilizzano uno snapshot del volume di archiviazione dell'istanza di origine che contiene il tablespace di sistema.

Informazioni correlate

Mancanza di spazio di storage per l'istanza di database Amazon RDS

Modifica di un'istanza database Amazon RDS

Come posso risolvere l'errore "MySQL HA_ERR_RECORD_FILE_FULL" quando utilizzo Amazon RDS per MySQL?