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.