Come posso risolvere i problemi di archiviazione locale nelle istanze compatibili con Aurora PostgreSQL?

6 minuti di lettura
0

Sto riscontrando problemi con l'archiviazione locale nelle mie istanze database edizione di Amazon Aurora compatibile con PostgreSQL.

Breve descrizione

Le istanze database che si trovano nei cluster Amazon Aurora dispongono di due tipi di archiviazione:

  • Archiviazione utilizzata per dati persistenti (volume di cluster condiviso). Per ulteriori informazioni, consulta Contenuto dei volumi del cluster.
  • Archiviazione locale per ogni istanza Aurora nel cluster, in base alla classe di istanza. Questa dimensione di archiviazione è associata alla classe di istanza e può essere modificata solo passando a una classe di istanza database più grande. Aurora compatibile con PostgreSQL utilizza l'archiviazione locale per archiviare i log degli errori e i file temporanei. Per ulteriori informazioni, consulta Limiti di archiviazione temporanea per Aurora PostgreSQL.

Risoluzione

Puoi monitorare lo spazio di archiviazione locale associato all'istanza database o al nodo di Aurora utilizzando la metrica Amazon CloudWatch per FreeLocalStorage. Questa metrica riporta la quantità di spazio di archiviazione disponibile per ogni istanza database per le tabelle e i log temporanei. Per ulteriori informazioni, consulta Monitoraggio dei parametri di Amazon Aurora con Amazon CloudWatch.

Se lo spazio di archiviazione locale di Aurora è pieno, utilizza questi passaggi per la risoluzione dei problemi a seconda dell'errore ricevuto.

Lo spazio di archiviazione locale viene utilizzato da tabelle o file temporanei

"ERRORE: impossibile scrivere il blocco XXXXXXXX del file temporaneo: Nessuno spazio rimasto sul dispositivo."

Questo errore si verifica quando l'archiviazione temporanea sull'istanza database è esaurita. Ciò può avere diverse cause, tra cui operazioni che:

  • modificano tabelle di grandi dimensioni;
  • aggiungono indici su tabelle di grandi dimensioni;
  • eseguono query SELECT di grandi dimensioni con clausole JOIN, GROUP BY o ORDER BY complesse.

Usa questi metodi per controllare le tabelle temporanee e le dimensioni dei file temporanei:

1.    Per i file temporanei, attiva il parametro log_temp_files sull'istanza database di Aurora compatibile con PostgreSQL. Questo parametro registra l'uso di file temporanei di dimensioni superiori rispetto al numero di kilobyte specificato. Dopo l'attivazione di questo parametro, viene creata una voce del log per ogni file temporaneo quando il file viene eliminato. Un valore pari a 0 registra tutte le informazioni sui file temporanei. Un valore positivo registra solo i file di dimensioni superiori o uguali al numero di kilobyte specificato. Il valore predefinito è -1, che disattiva la registrazione temporanea dei file. Utilizza questo parametro per identificare i dettagli dei file temporanei, quindi associa questi file temporanei con la metrica FreeLocalStorage.

**Nota:**L'attivazione del parametro log_temp_files può causare registrazioni eccessive sull'istanza database di Aurora compatibile con PostgreSQL. Per questo motivo, è consigliabile controllare la dimensione dei file di log di Aurora compatibile con PostgreSQL prima di attivare log_temp_files. Se i file di log consumano lo spazio massimo per l'archiviazione locale, riduci il valore di rds.log_retention per recuperare spazio. Il valore predefinito per rds.log_retention è tre giorni.

Puoi anche esaminare i file temporanei utilizzando il delta delle esecuzioni successive di questo comando:

maxiops=> select datname, temp_files , pg_size_pretty(temp_bytes) as temp_file_size  FROM   pg_stat_database order by temp_bytes desc;

**Nota:**nella colonna temp_files, vengono contati tutti i file temporanei, indipendentemente da quando hai creato il file temporaneo (ad esempio, ordinando o eseguendo l'hashing). Le colonne temp_files e temp_bytes nella vista pg_stat_database raccolgono statistiche per il valore accumulato. Questo valore può essere ripristinato utilizzando la funzione pg_stat_reset() o riavviando l'istanza database. Per ulteriori informazioni, consulta la documentazione di PostgreSQL sulle funzioni statistiche aggiuntive.

Se utilizzi Aurora compatibile con PostgreSQL 10 o versioni successive, puoi monitorare temp_bytes e temp_files utilizzando Performance Insights. Questo vale anche per Amazon Relational Database Service (Amazon RDS) per PostgreSQL. Performance Insights fornisce contatori nativi per le metriche interne del motore database, oltre agli eventi di attesa. Per ulteriori informazioni, consulta Contatori nativi per Amazon RDS for PostgreSQL.

È inoltre possibile aumentare maintenance_work_mem e work_mem per allocare più memoria ai processi che eseguono l'operazione. Ciò utilizza più memoria per l'operazione, che può utilizzare meno spazio di archiviazione temporaneo su disco. Per ulteriori informazioni su questi parametri, consulta la documentazione di PostgreSQL su maintenance_work_mem e work_mem. È consigliabile impostare i valori per maintenance_work_mem e work_mem a livello di query o sessione per evitare l'esaurimento della memoria. Per ulteriori informazioni, consulta Riferimento Amazon Aurora PostgreSQL.

2.    Per le tabelle temporanee, esegui una query come questa:

maxiops=> SELECT
n.nspname as SchemaName
,c.relname as RelationName
,CASE c.relkind
WHEN 'r' THEN 'table'
WHEN 'v' THEN 'view'
WHEN 'i' THEN 'index'
WHEN 'S' THEN 'sequence'
WHEN 's' THEN 'special'
END as RelationType
,pg_catalog.pg_get_userbyid(c.relowner) as RelationOwner
,pg_size_pretty(pg_relation_size(n.nspname ||'.'|| c.relname)) as RelationSize
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n
    ON n.oid = c.relnamespace
WHERE  c.relkind IN ('r','s')
AND  (n.nspname !~ '^pg_toast' and nspname like 'pg_temp%')
ORDER BY pg_relation_size(n.nspname ||'.'|| c.relname) DESC;

È consigliabile monitorare attentamente l'applicazione e vedere quali transazioni creano tabelle temporanee. In questo modo, è possibile gestire l'utilizzo della capacità di archiviazione locale disponibile. Puoi anche passare a una classe di istanza superiore per la tua istanza Aurora in modo che l'istanza abbia più spazio di archiviazione locale disponibile.

Archiviazione locale utilizzata dai file di log

Registrazioni eccessive possono anche causare l'esaurimento dello spazio di archiviazione locale dell'istanza database. Questi sono alcuni esempi di parametri di registrazione che possono consumare lo spazio di archiviazione locale. Il consumo potrebbe essere dovuto a registrazioni eccessive o alla conservazione del log degli errori per un lungo periodo.

rds.log_retention_period
auto_explain.log_min_duration
log_connections
log_disconnections
log_lock_waits
log_min_duration_statement
log_statement
log_statement_stats

Per identificare quale parametro sta causando registrazioni eccessive, analizza i log di PostgreSQL per trovare i log di dimensioni maggiori. Quindi, identifica quale parametro è responsabile della maggior parte delle voci in quei log. È quindi possibile modificare il parametro che causa la registrazione eccessiva.

Se esegui ripetutamente una query che fallisce con un errore, PostgreSQL registra gli errori nel log degli errori di PostgreSQL per impostazione predefinita. Controlla gli errori registrati, quindi correggi la query non riuscita per evitare che i log utilizzino uno spazio di archiviazione eccessivo. Puoi anche ridurre il valore predefinito per rds.log_retention (tre giorni) per recuperare lo spazio utilizzato dai log degli errori.

Se sono necessarie registrazioni eccessive e stai limitando lo spazio di archiviazione locale disponibile a causa dei file di log, valuta la possibilità di passare a una classe di istanza superiore. Ciò significa che la tua istanza database di Aurora ha più spazio di archiviazione locale disponibile.


Informazioni correlate

Best practice con Amazon Aurora PostgreSQL

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa