Re: Duda sobre index scan

From: Marcos Ortiz <mlortiz(at)uci(dot)cu>
To: Alejandro Carrillo <fasterzip(at)yahoo(dot)es>
Cc: Lazaro Ruben Garcia Martinez <lgarciam(at)uci(dot)cu>, PostGreSql- Ayuda Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Duda sobre index scan
Date: 2012-05-07 15:33:45
Message-ID: 4FA7EB59.8090902@uci.cu
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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 <lgarciam(at)uci(dot)cu>
> *Para:* PostGreSql- Ayuda Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
> *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

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2012-05-07 16:23:24 Re: Machete para examen jejeje
Previous Message Alejandro Carrillo 2012-05-07 14:46:34 Re: Machete para examen jejeje