Ottimizzazione RDSper Postgre SQL Postgre con informazioni proattive su Amazon SQL Guru DevOps - Amazon Relational Database Service

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.

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.

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.

    In pgadmin, scegli di AUTOCOMMIT attivarlo.
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.