Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
Come posso risolvere i problemi di archiviazione locale nelle mie istanze database Aurora compatibile con PostgreSQL?
Desidero risolvere i problemi relativi a tabelle temporanee, file di log e altri fattori che causano problemi di archiviazione locale nelle mie istanze database Amazon Aurora compatibile con PostgreSQL.
Breve descrizione
Esistono due tipi di archiviazione per Amazon Aurora: archiviazione per dati persistenti, come il volume di cluster condiviso, e archiviazione locale per ogni istanza database.
La dimensione dello spazio di archiviazione locale è legata alla classe di istanza. Puoi modificare le dimensioni dello spazio di archiviazione solo se passi 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 i tipi di istanza non di classe T, il sistema scrive i log su un volume dedicato che il sistema pulisce automaticamente.
Per monitorare lo spazio di archiviazione locale associato al nodo o all'istanza database Aurora, utilizza la metrica di Amazon CloudWatch FreeLocalStorage. Questa metrica riporta la quantità di spazio di archiviazione disponibile per le tabelle temporanee in ogni istanza database.
Risoluzione
Spazio di archiviazione locale esaurito
Quando lo spazio di archiviazione temporanea è esaurito, ricevi il messaggio di errore "could not write block ###### of temporary file: No space left on device". L'errore può essere determinato dalle seguenti operazioni:
- Modifica di tabelle di grandi dimensioni
- Aggiunta di indici in tabelle di grandi dimensioni
- Esecuzione di query SELECT di grandi dimensioni con clausole JOIN, GROUP BY o ORDER BY complesse.
Controlla la dimensione dei file temporanei
Per identificare i dettagli del file temporaneo, attiva il parametro log_temp_files nell'istanza database Aurora compatibile con PostgreSQL. Quindi confronta i file temporanei con la metrica FreeLocalStorage.
Il parametro log_temp_files registra ogni file temporaneo di dimensioni superiori al numero di kilobyte specificato. Un valore pari a 0 registra informazioni su tutti i 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 dei file temporanei. Quando attivi il parametro log_temp_files, questo può causare una registrazione eccessiva nell'istanza database Aurora compatibile con PostgreSQL.
È consigliabile controllare le dimensioni dei file di log di Aurora compatibile con PostgreSQL prima di attivare log_temp_files. Se i file di log utilizzano lo spazio massimo per l'archiviazione locale, riduci il valore di rds.log_retention per recuperare spazio. Il valore predefinito per rds.log_retention è 3 giorni.
Per controllare le dimensioni dei file temporanei, esegui questo comando più volte:
maxiops=> select datname, temp_files , pg_size_pretty(temp_bytes) as temp_file_size FROM pg_stat_database order by temp_bytes desc;
Nota: utilizza l'output che è cambiato dopo le esecuzioni successive.
Nella colonna temp_files, vengono conteggiati tutti i file temporanei indipendentemente da quando sono stati creati. Le colonne temp_files e temp_bytes nella vista pg_stat_database raccolgono le statistiche per il valore accumulato. Per reimpostare il valore, utilizza la funzione pg_stat_reset() o riavvia l'istanza database. Per ulteriori informazioni, consulta Additional statistics functions (Funzioni statistiche aggiuntive) sul sito web PostgreSQL.
Se utilizzi Aurora PostgreSQL 10 o versioni successive, puoi monitorare temp_bytes e temp_files con Approfondimenti sulle prestazioni. Approfondimenti sulle prestazioni fornisce contatori nativi per le metriche interne e gli eventi di attesa del motore del database. Puoi anche attivare Approfondimenti sulle prestazioni e utilizzare Database Insights per monitorare i log del database.
Per allocare più memoria ai processi che eseguono l'operazione, puoi incrementare i parametri maintenance_work_mem e work_mem. Questo metodo utilizza più memoria per l'operazione e meno spazio di archiviazione temporanea su disco. Per ulteriori informazioni su questi parametri, consulta maintenance_work_mem e work_mem sul sito web PostgreSQL.
È consigliabile impostare i valori di maintenance_work_mem e work_mem a livello di query o di sessione. In questo modo, le istanze database non restano senza memoria. Per ulteriori informazioni, consulta Riferimento Amazon Aurora PostgreSQL.
Controlla le dimensioni delle tabelle temporanee
Esegui questa query:
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 le transazioni che creano tabelle temporanee. In questo modo, puoi gestire l'utilizzo della capacità di archiviazione locale disponibile. Puoi anche cambiare la classe di istanza per l'istanza database Aurora in modo che abbia più spazio di archiviazione locale disponibile.
Registra i file (applicabile solo per i tipi di classi di istanze a prestazioni espandibili) che utilizzano l'archiviazione locale
Una registrazione eccessiva può comportare l'esaurimento dello spazio di archiviazione dell'istanza database solo per i tipi di classi di istanze a prestazioni espandibili come db.t2, db.t3 e db.t4g. Di seguito sono riportati alcuni esempi di parametri di registrazione che possono consumare lo spazio di archiviazione locale. Il consumo potrebbe essere dovuto a una registrazione eccessiva o alla conservazione del log degli errori per un lungo periodo.
Per identificare il parametro che causa la registrazione eccessiva, analizza i log di PostgreSQL e individua quelli più grandi. Dopodiché identifica il parametro responsabile della maggior parte delle voci in quei log. Una volta identificato, puoi modificare il parametro che causa la registrazione eccessiva.
Esempio di output:
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
Se esegui ripetutamente una query che ha esito negativo e genera un errore, per impostazione predefinita PostgreSQL registra gli errori nel log degli errori di PostgreSQL. Per evitare che i log degli errori utilizzino uno spazio di archiviazione eccessivo, rivedi gli errori nel log e correggi la query non riuscita. Puoi anche ridurre il valore predefinito di 3 giorni per rds.log_retention in modo da recuperare lo spazio utilizzato dai log degli errori.
È consigliabile modificare la classe di istanza con una più grande per evitare una registrazione eccessiva. Così facendo, l'istanza database Aurora ha più spazio di archiviazione locale disponibile.
Informazioni correlate
- Argomenti
- Database
- Lingua
- Italiano
