Re: checkpoints y disaster recovery anatomy

From: Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>
To: Richardson Hinestroza <richardhinestroza(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: checkpoints y disaster recovery anatomy
Date: 2015-10-12 16:29:31
Message-ID: 20151012162931.GO4405@alvherre.pgsql
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Richardson Hinestroza escribió:

Hola,

> He estado leyendo en la documentacion como funcionan los checkpoints en
> Postgresql, pero quisiera saber que pasa si durante un checkpoint una
> transaccion necesita hacer cambios a una de las dirty pages que estan en la
> lista seleccionada por el checkpoint para ser escritas en disco.
>
> No he podido entender si Posgresql bloquea transacciones que necesitan
> hacer cambios a las dirty page seleccionadas por un checkpoint para ser
> escritas a disco (por ejemplo INFORMIX bloquea estas transacciones).

No se bloquean transacciones. Lo que se hace es que se hace un primer
recorrido sobre todos los buffers, marcando todos los que están DIRTY
con un flag CHECKPOINT_NEEDED (sin escribir nada a disco); luego se
empieza la escritura a disco haciendo un segundo recorrido que escribe a
disco todos los buffers que tienen ese flag.

> Si Postgresql no bloquea estas transacciones entonces que version de
> pagina se guarda en disco? la version que estaba cuando comenzo el
> checkpoint o la version modificada por la transaccion durante el
> checkpoint. Ademas, cual seria la version de la data en disco, seria
> la version correspondiente al instante de tiempo cuando se inicio el
> checkpoint o cuando este termino?.

Si un segundo proceso modifica el buffer después del primer recorrido,
no se hace nada especial: la versión que se escriba en disco será la
versión modificada. Si un tercer proceso modifica el buffer después que
fue escrito pero antes que el checkpoint termine, no habrá otra
escritura sino hasta el siguiente checkpoint.

Puedes ver los detalles en la función BufferSync() en
src/backend/storage/buffer/bufmgr.c.

BTW el nombre "PostgreSQL" es un poco incómodo de escribir y pronunciar,
así que muchos usamos simplemente "Postgres".

> Despues de leer la documentacion sobre checkpoints y disaster recovery en
> Postgresql, veo que el algorithmo utilizado tiene similitudes con el
> algorithmo ARIES (por ejem. utiliza LSN en las paginas) pero no parece ser
> el mismo. quisiera saber cuales son las diferencias, ademas de saber si
> existe algun documento que revele la anatomia completa de los checkpoints y
> disaster recovery en postgresql asi como existe dicha documentacion para el
> algorithmo ARIES.

Desconozco el algoritmo ARIES, pero sí se utilizan los LSN en cada
bloque (página). Los detalles completos los puedes ver en el código;
por ejemplo algunos detalles en el archivo que ya señalé, y otros en los
comentarios justo antes de llamar a CheckPointGuts() dentro de
CreateCheckPoint(), en src/backend/access/transam/xlog.c. También mira
el README dentro de ese mismo directorio (probablemente partiendo desde
el título "Write-Ahead Log Coding"), aunque no habla mucho
específicamente acerca de los checkpoint.

Hay un capítulo en la documentación llamado "Reliability and the
Write-Ahead Log" que también deberías leer, quizás como punto de
partida.

--
Álvaro Herrera http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda(at)postgresql(dot)org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jaime Casanova 2015-10-13 05:21:04 Re: checkpoints y disaster recovery anatomy
Previous Message Richardson Hinestroza 2015-10-12 02:30:09 checkpoints y disaster recovery anatomy