Esempi di scrittura simultanea - Amazon Redshift

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

Esempi di scrittura simultanea

I seguenti esempi di pseudo codice dimostrano come, quando vengono eseguite simultaneamente, le transazioni procedono o attendono.

COPYOperazioni simultanee nella stessa tabella

La transazione 1 copia le righe nella LISTING tabella:

begin; copy listing from ...; end;

La transazione 2 viene avviata contemporaneamente in una sessione separata e tenta di copiare più righe nella LISTING tabella. La transazione 2 deve attendere che la transazione 1 rilasci il blocco di scrittura sulla LISTING tabella, quindi può procedere.

begin; [waits] copy listing from ; end;

Lo stesso comportamento si verificherebbe se una o entrambe le transazioni contenessero un INSERT comando anziché un COPY comando.

DELETEOperazioni concorrenti dalla stessa tabella

La transazione 1 elimina le righe da una tabella:

begin; delete from listing where ...; end;

La transazione 2 inizia simultaneamente e prova a eliminare le righe dalla stessa tabella. Avrà esito positivo perché attende il completamento della transazione 1 prima di provare eliminare le righe.

begin [waits] delete from listing where ; end;

Lo stesso comportamento si verificherebbe se una o entrambe le transazioni contenessero un UPDATE comando per la stessa tabella anziché un DELETE comando.

Transazioni simultanee con una combinazione di operazioni di lettura e scrittura

In questo esempio, la transazione 1 elimina le righe dalla USERS tabella, ricarica la tabella, esegue una query COUNT (*) e quindiANALYZE, prima di eseguire il commit:

begin; delete one row from USERS table; copy ; select count(*) from users; analyze ; end;

Allo stesso tempo, inizia la transazione 2. Questa transazione tenta di copiare righe aggiuntive nella USERS tabella, analizzare la tabella e quindi eseguire la stessa query COUNT (*) della prima transazione:

begin; [waits] copy users from ...; select count(*) from users; analyze; end;

La seconda transazione avrà esito positivo perché deve attendere il completamento della prima. La sua COUNT query restituirà il conteggio in base al caricamento completato.