Dal momento che solo SELECT
, l'impatto è limitato. È più grave per qualsiasi operazione di scrittura, in cui le modifiche non sono visibili a qualsiasi altra transazione fino a quando non viene eseguito il commit, e viene persa se non viene mai eseguita.
Lo fa costo un po 'di RAM e permanente occupa una delle vostre connessioni consentite (che può o non può importa).
Una delle conseguenze più gravi delle transazioni di lunga durata: blocca VACUUM
dal suo lavoro, poiché c'è ancora una vecchia transazione che può vedere le vecchie righe. Il sistema inizierà a gonfiarsi.
In particolare, acquisisce un blocco ACCESS SHARE
(il minimo blocco di tutti) su tutte le tabelle di riferimento. Questo non interferisce con altri comandi DML come INSERT
, UPDATE
o DELETE
, ma sarà comanda blocco DDL nonché TRUNCATE
o VACUUM
(compresi i lavori autovacuum). See "Table-level Locks" in the manual.
Si può anche interferire con vari replica soluzioni e portare a transazione ID avvolgente nel lungo periodo se rimane aperta abbastanza a lungo/a bruciare abbastanza XIDs abbastanza veloce. Maggiori informazioni su questo in the manual on "Routine Vacuuming".
Gli effetti di blocco possono fungo se altre transazioni sono bloccate dall'impegno e quelle hanno acquisito blocchi proprio. Ecc
È possibile tenere aperte le transazioni (quasi) a tempo indeterminato - fino a quando la connessione è chiusa (. Che avviene anche quando il server viene riavviato, ovviamente)
Ma non lasciano mai le transazioni aperto più a lungo del necessario.
fonte
2015-11-19 22:34:39
Gli impatti: 1. i tuoi dati non sono visibili ad altre transazioni 2.se alla fine non ti impegni, perdi i tuoi dati. – zerkms
@zerkms Sono più interessato all'impatto dell'elaborazione sul server: mi rendo conto che eventuali modifiche apportate non sarebbero visibili ad altre connessioni (anche se in questo caso, è solo la lettura dei dati, non modifica mai nulla) – wolfcastle
La perdita dei dati non è alla fine una preoccupazione perché puoi sempre usare SAVEPOINTS. – Madthew