Serializzazione e accodamento delle transazioni concorrenti, transazioni implicite
Una transazione implicita è una singola istruzione SQL non incorniciata da un'istruzione BEGIN.
Quando una transazione implicita fallisce la serializzazione
Il sistema risponde come segue per una transazione implicita che fallisce la serializzazione:
- Il sistema attende il completamento della transazione che ha causato il conflitto di serializzazione.
- Una volta terminata la transazione, con commit o abortita, il sistema ripropone le richieste in attesa.
Quando il numero di transazioni implicite supera il limite
Se il sistema raggiunge un limite di 63 transazioni simultanee di lettura/scrittura e viene emessa una transazione implicita che tenta di modificare i dati, il sistema salva e mette in coda la transazione finché il numero di transazioni simultanee di lettura/scrittura non scende sotto il limite.
Modificare il limite di tempo predefinito
Il sistema salva e mette in coda le transazioni implicite per un massimo di 360 minuti (valore predefinito). Se una transazione implicita attende più di 360 minuti (o sei ore), la transazione fallisce e restituisce il messaggio di erroreERROR: Too many concurrent transactions. È possibile modificare questa impostazione di timeout predefinita in due modi:
- Per impostare il valore per la sessione corrente, eseguire il seguente comando:
SET serialization_queue_timeout = <number of minutes> - Per rendere l'impostazione globale, impostare la variabile serialization_queue_timeout in 'postgresql.conf.