Exemples d’écritures simultanées - Amazon Redshift

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Exemples d’écritures simultanées

Les exemples de pseudo-code suivants montrent comment les transactions se poursuivent ou attendent quand elles sont exécutées simultanément.

COPYOpérations simultanées dans la même table

La transaction 1 copie des lignes dans le LISTING tableau :

begin; copy listing from ...; end;

La transaction 2 démarre simultanément dans une session séparée et tente de copier davantage de lignes dans la LISTING table. La transaction 2 doit attendre que la transaction 1 libère le verrou d'écriture sur la LISTING table pour pouvoir continuer.

begin; [waits] copy listing from ; end;

Le même comportement se produirait si l'une ou les deux transactions contenaient une INSERT commande au lieu d'une COPY commande.

DELETEOpérations simultanées à partir d'une même table

La transaction 1 supprime des lignes d’une table :

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

La transaction 2 commence simultanément et tente de supprimer des lignes de la même table. Elle réussit, car elle attend que la transaction 1 ait terminé avant de tenter de supprimer des lignes.

begin [waits] delete from listing where ; end;

Le même comportement se produirait si l'une ou les deux transactions contenaient une UPDATE commande vers la même table au lieu d'une DELETE commande.

Transactions simultanées avec un mélange d’opérations de lecture et d’écriture

Dans cet exemple, la transaction 1 supprime des lignes de la USERS table, recharge la table, exécute une requête COUNT (*), puisANALYZE, avant de valider :

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

Pendant ce temps, la transaction 2 démarre. Cette transaction tente de copier des lignes supplémentaires dans la USERS table, d'analyser la table, puis d'exécuter la même requête COUNT (*) que la première transaction :

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

La deuxième transaction réussit, car elle doit attendre que la première soit terminée. Sa COUNT requête renverra le nombre en fonction du chargement effectué.