

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à.

# DevOps
<a name="PostgreSQL.Tuning_proactive_insights"></a>

DevOpsGuru proactive Insights rileva le condizioni sui cluster RDS per PostgreSQL DB Aurora PostgreSQL che possono . Gli approfondimenti proattivi possono avvisare di una connessione di transazione inattiva da molto tempo. Per ulteriori informazioni sulla risoluzione dei problemi di inattività prolungata nelle connessioni di transazione, consulta [Il database ha una connessione di transazione inattiva da molto tempo](#proactive-insights.idle-txn).

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 for Amazon RDS, consulta. [Analisi delle anomalie delle prestazioni con Amazon DevOps Guru per Amazon RDS](devops-guru-for-rds.md)

## Il database ha una connessione di transazione inattiva da molto tempo
<a name="proactive-insights.idle-txn"></a>

Una connessione al database è nello stato `idle in transaction` da più di 1800 secondi.

**Topics**
+ [Versioni del motore supportate](#proactive-insights.idle-txn.context.supported)
+ [Contesto](#proactive-insights.idle-txn.context)
+ [Probabili cause di questo problema](#proactive-insights.idle-txn.causes)
+ [Azioni](#proactive-insights.idle-txn.actions)
+ [Metriche pertinenti](#proactive-insights.idle-txn.metrics)

### Versioni del motore supportate
<a name="proactive-insights.idle-txn.context.supported"></a>

Queste informazioni approfondite sono supportate per tutte le versioni di RDS per PostgreSQL.

### Contesto
<a name="proactive-insights.idle-txn.context"></a>

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
<a name="proactive-insights.idle-txn.causes"></a>

Una transazione avviata in una sessione interattiva con BEGIN o START TRANSACTION non è stata terminata utilizzando un comando COMMIT, ROLLBACK o END. Lo stato della transazione diventa pertanto `idle in transaction`.

### Azioni
<a name="proactive-insights.idle-txn.actions"></a>

Puoi individuare le transazioni inattive eseguendo la query `pg_stat_activity`.

Nel client SQL, esegui la query riportata di seguito per elencare tutte le connessioni nello stato `idle in transaction` e ordinarle in base alla 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.

**Topics**
+ [Terminare la transazione](#proactive-insights.idle-txn.actions.end-txn)
+ [Interrompere la connessione](#proactive-insights.idle-txn.actions.end-connection)
+ [Configurare il parametro idle\$1in\$1transaction\$1session\$1timeout](#proactive-insights.idle-txn.actions.parameter)
+ [Controllare lo stato di AUTOCOMMIT](#proactive-insights.idle-txn.actions.autocommit)
+ [Controllare la logica delle transazioni nel codice dell'applicazione](#proactive-insights.idle-txn.actions.app-logic)

#### Terminare la transazione
<a name="proactive-insights.idle-txn.actions.end-txn"></a>

Quando si avvia una transazione in una sessione interattiva con BEGIN o START TRANSACTION, lo stato della transazione diventa `idle in transaction`. Rimane in questo stato finché non si termina la transazione con un comando COMMIT, ROLLBACK, END o si disconnette completamente la connessione per eseguire il rollback della transazione.

#### Interrompere la connessione
<a name="proactive-insights.idle-txn.actions.end-connection"></a>

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\$1in\$1transaction\$1session\$1timeout
<a name="proactive-insights.idle-txn.actions.parameter"></a>

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, consulta la [documentazione di PostgreSQL](https://www.postgresql.org/docs/current/runtime-config-client.html). 

Il seguente messaggio verrà riportato nel file di log di PostgreSQL dopo l'interruzione della connessione, quando lo stato di una transazione è idle\$1in\$1transaction per un periodo superiore al tempo specificato.

```
FATAL: terminating connection due to idle in transaction timeout
```

#### Controllare lo stato di AUTOCOMMIT
<a name="proactive-insights.idle-txn.actions.autocommit"></a>

AUTOCOMMIT è attivato 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'opzione AUTOCOMMIT selezionando la freccia rivolta verso il basso.  
![\[In pgadmin, scegli AUTOCOMMIT per attivarlo.\]](http://docs.aws.amazon.com/it_it/AmazonRDS/latest/UserGuide/images/apg-insight-pgadmin-autocommit.png)

#### Controllare la logica delle transazioni nel codice dell'applicazione
<a name="proactive-insights.idle-txn.actions.app-logic"></a>

Controlla la logica dell'applicazione per individuare eventuali problemi. Prendi in considerazione le seguenti azioni:
+ Controlla se il commit automatico JDBC è impostato su true nell'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.

### Metriche pertinenti
<a name="proactive-insights.idle-txn.metrics"></a>

A questo approfondimento sono correlati i seguenti parametri PI:
+ idle\$1in\$1transaction\$1count - Numero di sessioni nello stato `idle in transaction`.
+ idle\$1in\$1transaction\$1max\$1time - La durata della transazione in esecuzione più lunga nello stato `idle in transaction`.