Comprendere il controllo della concorrenza multi-versione (MVCC) e gli snapshot
La maggior parte dei sistemi di gestione dei database (DBMS) usa blocchi per applicare il controllo della concorrenza, ma PostgreSQL integra il blocco con un approccio alternativo. PostgreSQL usa un sistema denominato Controllo concorrenza multi-versione (MVCC) che consente a più versioni della stessa riga di esistere per migliorare la concorrenza. Con questo sistema, ogni query vede uno snapshot precedente dei dati coerenti transazionalmente. MVCC garantisce che una transazione che legge i dati non blocchi una transazione che sta scrivendo dati e viceversa.
Ad esempio, la connessione A esegue una query che analizza tutte le righe di una tabella. Allo stesso tempo, la connessione B esegue una query che aggiorna alcune righe. MVCC consente l'esecuzione di entrambe le query contemporaneamente creando un'altra versione delle righe interessate. In questo modo, La connessione B può eseguire gli aggiornamenti senza influire sulla connessione A. Questo processo viene ottenuto da ogni versione di riga con un valore di xmin per il visibile dal momento che transazione e un valore xmax per il visibile fino a transazione. Con MVCC, connection A ignorerà le modifiche apportate dopo l'avvio della query Connection A.
Transazioni
Le transazioni in un DBMS sono un'unità atomica di lavoro, pertanto la transazione viene confermata interamente o per nulla. Le transazioni vengono usate anche a scopo di concorrenza. Con i livelli di isolamento, è possibile definire l'effetto che una transazione può avere su altre transazioni simultanee.
Si avvia una transazione con BEGIN TRANSACTION o START TRANSACTION. Si completa una transazione con COMMIT per salvare tutte le modifiche apportate nella transazione o ROLLBACK per annullare eventuali modifiche apportate dalla transazione. Per esempio:
BEGIN TRANSACTION;
UPDATE production.workorder
SET stockedqty=7
WHERE workorderid=1;
COMMIT;