En los siguientes ejemplos de pseudocódigo, se demuestra cómo, cuando se ejecutan de manera simultánea, las transacciones avanzan o esperan.
Ejemplos de escritura simultánea con aislamiento serializable
Operaciones COPY simultáneas en la misma tabla con aislamiento serializable
La transacción 1 copia filas en la tabla LISTING:
begin; copy listing from ...; end;
La transacción 2 comienza de manera simultánea en una sesión por separado y copia más filas en la tabla LISTING. La transacción 2 debe esperar hasta que la transacción 1 levante el bloqueo de escritura de la tabla LISTING; luego, podrá avanzar.
begin; [waits] copy listing from ; end;
El mismo comportamiento se observaría si una o ambas transacciones tuvieran un comando INSERT, en lugar de COPY.
Operaciones DELETE simultáneas desde la misma tabla con aislamiento serializable
La transacción 1 elimina filas de una tabla:
begin; delete from listing where ...; end;
La transacción 2 comienza de manera simultánea y elimina filas de la misma tabla. Tendrá éxito porque espera a que la transacción 1 termine antes de probar eliminar filas.
begin [waits] delete from listing where ; end;
El mismo comportamiento se observaría si una o ambas transacciones tuvieran un comando UPDATE para la misma tabla, en lugar de DELETE.
Transacciones simultáneas con una mezcla de operaciones de lectura y escritura con aislamiento serializable
En este ejemplo, la transacción 1 elimina filas de la tabla USERS, vuelve a cargar la tabla, ejecuta una consulta COUNT(*) y, luego, ANALYZE, antes de confirmar:
begin; delete one row from USERS table; copy ; select count(*) from users; analyze ; end;
Mientras tanto, comienza la transacción 2. Esta transacción prueba copiar filas adicionales en la tabla USERS, analizarla y, luego, ejecutar la misma consulta COUNT(*) que la primera transacción:
begin; [waits] copy users from ...; select count(*) from users; analyze; end;
La segunda transacción tendrá éxito porque debe esperar a que la primera termine. Su consulta COUNT devolverá el recuento en función de la carga que ha completado.
Ejemplos de escritura simultánea con aislamiento de instantánea
Operaciones de copia simultáneas en la misma tabla con aislamiento de instantánea
La transacción 1 copia filas en la tabla LISTING:
begin;
copy listing from ...;
end;
La transacción 2 comienza de manera simultánea en una sesión por separado y copia más filas en la tabla LISTING. La transacción 2 puede progresar simultáneamente hasta que cualquiera de las transacciones necesite escribir datos en la tabla de destino listing
, momento en el que se ejecutarán secuencialmente.
begin;
//When the COPY statement from T1 needs to write data to the table, the COPY statement from T2 waits.
copy listing from ...;
end;
El mismo comportamiento se observaría si una o ambas transacciones tuvieran un comando INSERT, en lugar de COPY.
Operaciones DELETE simultáneas desde la misma tabla con aislamiento de instantánea
Las operaciones DELETE y UPDATE simultáneas desde la misma tabla con aislamiento de instantánea se ejecutan igual que las operaciones ejecutadas con aislamiento serializable.
Transacciones simultáneas con una mezcla de operaciones de lectura y escritura con aislamiento de instantánea
Las transacciones simultáneas que se ejecutan con mezclas de operaciones con aislamiento de instantánea se ejecutan igual que las transacciones con mezclas de operaciones que se ejecutan con aislamiento serializable.