Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Ottimizzazione RDSper Postgre SQL Postgre con informazioni proattive su Amazon SQL Guru DevOps
DevOpsGuru proactive Insights rileva le condizioni sui cluster ti informa prima che si verifichino. Proactive Insights può avvisarti di un periodo di inattività prolungato nella connessione delle transazioni. Per ulteriori informazioni sulla risoluzione dei problemi di inattività prolungati nelle connessioni di transazione, consulta Il database ha una connessione di transazione inattiva da molto tempo
DevOpsGuru può fare quanto segue:
-
Evitare molti problemi comuni relativi al database controllando la configurazione del database rispetto alle impostazioni consigliate comuni.
-
Ricevere gli avvisi per le criticità relative al parco istanze che, se non controllate, possono portare a problemi più gravi in seguito.
-
Ricevere gli avvisi per i nuovi problemi individuati.
Ogni approfondimento proattivo contiene un'analisi della causa del problema e i suggerimenti per le azioni correttive.
Per ulteriori informazioni su Amazon DevOps Guru per AmazonRDS, consultaAnalisi delle anomalie prestazionali con Amazon Guru per Amazon DevOps RDS.
Il database ha una connessione di transazione inattiva da molto tempo
Una connessione al database è nello stato idle in transaction
da più di 1800 secondi.
Argomenti
Versioni del motore supportate
Context
Una transazione nello stato idle in transaction
può contenere blocchi che impediscono l'esecuzione di altre query. Può anche impedire al VACUUM
(incluso l'autovacuum) di cancellare le righe inutilizzate, con conseguente aumento delle dimensioni dell'indice o della tabella o del wraparound dell'ID della transazione.
Probabili cause di questo problema
Una transazione iniziata in una sessione interattiva con BEGIN o START TRANSACTION non è terminata utilizzando un comando, o. COMMIT ROLLBACK END Lo stato della transazione diventa pertanto idle in
transaction
.
Azioni
Puoi individuare le transazioni inattive eseguendo la query pg_stat_activity
.
Nel tuo SQL client, esegui la seguente query per elencare tutte le connessioni in idle in transaction
stato e ordinarle per durata:
SELECT now() - state_change as idle_in_transaction_duration, now() - xact_start as xact_duration,* FROM pg_stat_activity WHERE state = 'idle in transaction' AND xact_start is not null ORDER BY 1 DESC;
Consigliamo azioni diverse a seconda delle cause degli approfondimenti.
Argomenti
Terminare la transazione
Quando si avvia una transazione in una sessione interattiva con BEGIN o STARTTRANSACTION, passa allo idle in transaction
stato. Rimane in questo stato fino a quando non si termina la transazione emettendo un END comandoCOMMIT,ROLLBACK, o si disconnette completamente la connessione per ripristinare la transazione.
Interrompere la connessione
Interrompi la connessione con una transazione inattiva utilizzando la seguente query:
SELECT pg_terminate_backend
(pid)
;
pid è l'ID di processo della connessione.
Configurare il parametro idle_in_transaction_session_timeout
Configura il parametro idle_in_transaction_session_timeout
nel gruppo di parametri. Il vantaggio della configurazione di questo parametro è che non richiede un intervento manuale per terminare la transazione inattiva da tempo. Per ulteriori informazioni su questo parametro, consulta la documentazione di SQL Postgre
Il seguente messaggio verrà riportato nel file di SQL registro di Postgre dopo l'interruzione della connessione, quando una transazione rimane nello stato idle_in_transaction per un periodo più lungo del tempo specificato.
FATAL: terminating connection due to idle in transaction timeout
Controlla lo stato AUTOCOMMIT
AUTOCOMMITè attivata per impostazione predefinita. Tuttavia accidentalmente se viene disattivato nel client, assicurati di riattivarlo.
-
Nel client psql, esegui il comando seguente:
postgres=>
\set AUTOCOMMIT on
-
In pgadmin, attivalo scegliendo l'AUTOCOMMITopzione dalla freccia rivolta verso il basso.
Controllare la logica delle transazioni nel codice dell'applicazione
Controlla la logica dell'applicazione per individuare eventuali problemi. Prendi in considerazione le seguenti azioni:
-
Controlla se il commit JDBC automatico è impostato su true nella tua applicazione. Inoltre, considera l'utilizzo di comandi
COMMIT
espliciti nel codice. -
Controlla la logica di gestione degli errori per vedere se chiude una transazione dopo gli errori.
-
Controlla se l'applicazione impiega molto tempo per elaborare le righe restituite da una query mentre la transazione è aperta. In tal caso, valuta la possibilità di codificare l'applicazione per chiudere la transazione prima di elaborare le righe.
-
Controlla se una transazione contiene molte operazioni di lunga durata. In tal caso, dividi la singola transazione in più transazioni.
Parametri rilevanti
A questo approfondimento sono correlati i seguenti parametri PI:
-
idle_in_transaction_count - Numero di sessioni nello stato
idle in transaction
. -
idle_in_transaction_max_time - La durata della transazione in esecuzione più lunga nello stato
idle in transaction
.