Jaime Casanova escribió: > Cuando postgres actualiza un registro lo que hace es marcar la version > actual como "ya no es valida" y crea una nueva version del registro al > final de la tabla marcada como "esta es valida"... si la tabla tiene > indices se crea una entrada hacia el nuevo registro en cada indice > pero se mantiene el anterior... > > entonces cuando haces una consulta que hace uso de un indice, puede > que encuentre varias entradas que dicen ser el registro que se busca > pero en diferentes lugares en la tabla (posiblemente en diferentes > paginas del disco)... lo que el FILLFACTOR es reservar una parte de > cada pagina para poner ahi las versiones nuevas de los registros, > evitando tener que acceder varias veces al disco...
Otro detalle a tener en cuenta es HOT (sólo desde 8.3 en adelante). Cuando haces un UPDATE de una tupla y hay espacio libre en la misma página, en vez de crearse un nuevo puntero en el índice, se marca la tupla en la tabla y en el índice no se inserta nada. El único requerimiento es que en la página debe haber espacio libre para insertar la nueva tupla de la tabla. Para ayudar a satisfacer esta condición un mayor porcentaje del tiempo, se puede reservar un espacio con el fillfactor. En todo caso hay que tener claro que un fillfactor muy bajo es malo para el rendimiento porque hay espacio en cache (shared buffers y en el cache del kernel) que no se aprovecha. Por lo tanto no hay que bajarlo mucho. -- Alvaro Herrera http://www.amazon.com/gp/registry/DXLWNGRJD34J "La tristeza es un muro entre dos jardines" (Khalil Gibran) -- TIP 7: no olvides aumentar la configuración del "free space map"