Re: Transportar base de datos

From: Alvaro Herrera <alvherre(at)dcc(dot)uchile(dot)cl>
To: Edwin Quijada <listas_quijada(at)hotmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Transportar base de datos
Date: 2004-12-23 22:22:26
Message-ID: 20041223222226.GD13513@dcc.uchile.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On Thu, Dec 23, 2004 at 02:18:28PM +0000, Edwin Quijada wrote:

> Interesante exposicion de conocimientos, Alvaro. UNa pregunta desde
> ahi:

Voy a invertir el orden de las preguntas ...

> y como puedo no permitir conexiones a la base de datos? Donde esta
> esa variable que mencionas pg_database.datallowcon?

pg_database.datallowcon es una columna de la tabla pg_database.

> Que accion hace VACUUM FREEZE?

A ver ... todos los registros en una tabla estan marcados con dos
identificadores de transaccion (Xid), uno de la transaccion que lo crea
y otro de la transaccion que lo destruye. Si la transaccion que lo
destruye aun no ocurre, entonces se guarda un Xid no valido y por lo
tanto el registro "es visible". En cuanto una transaccion borra un
registro (UPDATE, DELETE), se marca con el Xid de esa transaccion.
(Este mecanismo es el que permite tener varias versiones de un registro,
marcadas con distintos Xids que determinan la visibilidad de cada uno
para las distintas transacciones concurrentes).

Ahora, lo que hace VACUUM es examinar cada registro, y si determina que
no es visible para ninguna transaccion que este en curso, entonces es
espacio muerto y se puede liberar. Ahora, cada 4 mil millones de
transacciones, el contador de transacciones "da la vuelta" (vuelve a
cero), y cuando eso ocurre, las reglas de visibilidad fallan, y de
pronto todas las tuplas ya no son visibles (es decir todas las tablas
aparecen vacias). Para evitar este problema, VACUUM marca con un Xid
especial (FrozenXid) las tuplas que siguen vivas despues de 2 mil
millones de transacciones.

VACUUM FREEZE es especial porque marca de inmediato todas las tuplas
vivas con FrozenXid. Por esto, ya no importa si el registro de
compromiso de transacciones (commit log o pg_clog) dice que las
transacciones estan comprometidas o abortadas, porque FrozenXid siempre
tiene el valor "comprometida". Pero es fundamental que ninguna
transaccion modifique ninguna tupla _despues_ de haberla "congelado",
porque de lo contrario se marcaria con un Xid que no es FrozenXid, y por
lo tanto se haria dependiente de pg_clog nuevamente.

Espero que haya quedado claro ...

--
Alvaro Herrera (<alvherre[(at)]dcc(dot)uchile(dot)cl>)
"Nunca confiaré en un traidor. Ni siquiera si el traidor lo he creado yo"
(Barón Vladimir Harkonnen)

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Ximo Llacer 2004-12-23 22:44:46 Feliz Navidad
Previous Message Jaime Casanova 2004-12-23 21:31:56 Re: consulta