Excerpts from Terry Yapt's message of jue sep 09 11:12:15 -0400 2010:
Hola,
row-migration, es cuando en Oracle, un UPDATE amplia la cantidad de
información de forma tal que no cabe en el bloque(s) de disco donde
antes se encontraba esa fila. Oracle, mueve toda la fila a una nueva
posición y pone un "puntero" en la ubicación antigua. Con todo lo que
ello conlleva en el futuro.
OK, como te comentaba esto se hace siempre en Postgres, debido al
concepto del "non-overwriting storage manager".
row-chaining, es cuando una fila no cabe en un solo bloque de disco
lógico (blocksize) con el tamaño con el que se ha definido la base de
datos (en el momento de su creación o de la creación de sus datafiles),
por tanto, en ese momento, Oracle debe guardar esa fila en más de un
bloque lógico de información y esto es lo que se denomina row-chaining.
En el futuro, dependiendo de que información deseemos recoger de la
fila, Oracle deberá ir de un bloque a otro o no.
Esto no existe en Postgres. Un registro existe siempre en un solo
bloque. Los registros que ocupan más que un bloque son "comprimidos"
usando TOAST: los atributos demasiado grandes se guardan automáticamente
en una tabla aparte (la tabla toast), y en el registro propiamente tal
sólo se guarda un puntero hacia ese otro registro. Este puntero mide
como 20 bytes. Por lo tanto una de las limitaciones de Postgres es que
la cantidad de columnas que puede tener un registro es la cantidad que
se puede almacenar en un solo bloque. Con tipos de datos pequeños
puedes tener 1600 columnas en bloques de 8kB (el tamaño por omisión).
Si los datos requieren un puntero toast, entonces la cantidad de
atributos es menor (creo que puedes tener hasta 200 y tantas columnas).
Hay una explicación más detallada de TOAST en el manual.
--
Álvaro Herrera <
[email protected]>
The PostgreSQL Company - Command Prompt, Inc.
PostgreSQL Replication, Consulting, Custom Development, 24x7 support