On 05/07/2012 10:14 AM, Alejandro Carrillo wrote:
Creo que sobre el punto 2 puedes leer esto: https://devcenter.heroku.com/articles/postgresql-indexes "Finally, indexes will become fragmented and unoptimized after some time, especially if the rows in the table are often updated or deleted. In those cases it may be required to perform a |REINDEX| <http://www.postgresql.org/docs/current/static/sql-reindex.html> leaving you with a balanced and optimized index. However be cautious about reindexing big indexes as write locks are obtained on the parent table. One strategy to achieve the same result on a live site is to build an index concurrently on the same table and columns but with a different name, and then dropping the original index and renaming the new one. This procedure, while much longer, won’t require any long running locks on the live tables."

    ------------------------------------------------------------------------
    *De:* Lazaro Ruben Garcia Martinez <[email protected]>
    *Para:* PostGreSql- Ayuda Ayuda <[email protected]>
    *Enviado:* Lunes 7 de Mayo de 2012 8:40
    *Asunto:* [pgsql-es-ayuda] Duda sobre index scan

    Hola a todas en la lista, les escribo porque tengo unas dudas
    relacionadas con la búsqueda indexada (index scan). Según tengo
    entendido, un índice es una copia de un campo de la tabla, cuya
    estructura es un árbol binario de búsqueda, sobre el cual se
    realiza el recorrido. Las preguntas son las siguientes:

    1- Los bloques de datos solo son leídos cuando el índice satisface
    la condición de búsqueda y es necesario revisar el bloque de dato
    para ver la visibilidad del campo, o siempre que se recorre un
    nodo del árbol, se revisan los bloques de datos donde están los
    datos de la tabla?

Los bloques son leídos en dependencia de la condición como dijiste


    2- Cuando existen tuplas muertas en una tabla, donde para esa
    tupla hay una columna que esta siendo indexada, tiene ese índice
    alguna información de la tupla muerta; en caso de no conocer que
    la tupla esta muerta pudiera ser ese el motivo por el cual se
    recorren los nodos del árbol y luego se revisan los bloques de
    datos, para ver la visibilidad de la tupla?

Precisamente por esta razón, es que se recomienda hacer VACUUM ANALYZE y REINDEX a la base de datos periódicamente. REINDEX verifica las páginas de índices B-Tree que se han vuelto vacías, y reclama ese espacio para su reuso, pero siempre el proceso no está acorde con los datos o con la carga que tenemos en la base de datos, por tanto, la recomendación es que siempre uses VACUUM ANALYZE y REINDEX periódicamente.

http://www.postgresql.org/docs/current/static/routine-vacuuming.html
http://www.postgresql.org/docs/current/static/routine-reindex.html

A partir de la versión 9.0, se puede construir el índice concurrentemente, lo cual hace que PostgreSQL cree el índice sin poner algún bloqueo que prevenga inserciones, actualizaciones o borrados concurrentes en la tabla, por el hecho de que un índice estándar crea bloqueos en las escrituras (pero no en la lectura de datos), hasta que el proceso haya terminado. Por supuesto, esto tiene sus ventajas y desventajas.

http://www.postgresql.org/docs/current/static/sql-createindex.html#SQL-CREATEINDEX-CONCURRENTLY

No te pierdas los cambios de la versión 9.2, que trae varias mejoras con respecto a este tema. Busca en el blog de Hubert,
lo etiquetado con pg92 para que veas los posts de su serie "Waiting for 9.2"
http://www.depesz.com/tags/pg92
- DROP INDEX CONCURRENTLY
- Mejoras considerables en la utilidad pg_upgrade
- Adición de un seudo-tipo llamado small serial
- Modernización del procesamiento de tokens en el pg_hba.conf
- Habilitación de restricciones CHECK para ser declaradas NOT VALID
- Inclusión de la opción \ir para psql
- Grandes mejoras en el uso de múltiples SAVEPOINTS
- Soporte para SECURITY_LABEL en tablas, tablespaces y roles
- Mejoras en PL/Python
- Index-only scans

y muchas más.
Gracias a Bonne, por la lista de los commits que envuelven a la versión 9.2
Saludos


    Saludos a todos y muchas gracias por su tiempo.





    <http://www.uci.cu/>

    <http://www.uci.cu/>




<http://www.uci.cu/>

--
Marcos Luis Ortíz Valmaseda (@marcosluis2186)
 Data Engineer at UCI
 http://marcosluis2186.posterous.com



10mo. ANIVERSARIO DE LA CREACION DE LA UNIVERSIDAD DE LAS CIENCIAS 
INFORMATICAS...
CONECTADOS AL FUTURO, CONECTADOS A LA REVOLUCION

http://www.uci.cu
http://www.facebook.com/universidad.uci
http://www.flickr.com/photos/universidad_uci

Responder a