Todos los términos del glosario

Registro de escritura anticipada (WAL)

¿Qué es el registro de escritura anticipada (WAL) en PostgreSQL?

El registro de escritura anticipada guarda cada cambio antes de que llegue a los archivos de datos, para que PostgreSQL pueda recuperarse tras una caída. WAL también alimenta la replicación y la recuperación a un punto en el tiempo.

La idea central del registro de escritura anticipada es que los cambios en los archivos de datos solo pueden escribirse después de que esos cambios se hayan registrado y el registro se haya volcado a almacenamiento permanente. Tras una caída, PostgreSQL vuelve a aplicar el registro desde el último checkpoint para devolver los archivos de datos a un estado coherente.

Como al confirmar una transacción solo hay que volcar el registro secuencial, y no cada página de datos que modificó, WAL también reduce las escrituras en disco. El mismo flujo de registros WAL es lo que la replicación en streaming envía a los servidores standby y lo que el archivado continuo guarda para la recuperación a un punto en el tiempo. Las posiciones en el registro se llaman números de secuencia de registro (LSN).

Ejemplo

El ejemplo muestra el wal_level configurado y la posición actual del WAL antes y después de crear una tabla con 10 000 filas. La segunda posición está más adelante porque la nueva tabla se escribió en el registro.

SHOW wal_level;
SELECT pg_current_wal_lsn();

CREATE TABLE wal_demo AS SELECT g FROM generate_series(1, 10000) AS g;

SELECT pg_current_wal_lsn();

SQL simple para PostgreSQL 16 o 17 estándar, sin extensiones. Ejecútalo en una base de datos vacía que puedas descartar.

Fuentes

Documentación oficial de PostgreSQL (en inglés).

Términos relacionados