Con esta consulta a pg_stat_user_indexes, puedes ver los candidatos a borrar:

SELECT
      idstat.relname AS table_name,
 
      indexrelname AS index_name, 
      idstat.idx_scan AS times_used, 
      pg_size_pretty(pg_relation_size(idstat.relname)) AS table_size,
      pg_size_pretty(pg_relation_size(indexrelname)) AS index_size,
 
      n_tup_upd + n_tup_ins + n_tup_del as num_writes, 
      indexdef AS definition 
FROM pg_stat_user_indexes AS idstat JOIN pg_indexes ON indexrelname = indexname 
JOIN pg_stat_user_tables AS tabstat ON idstat.relname = tabstat.relname 
WHERE idstat.idx_scan < 200 
AND indexdef !~* 'unique' 
ORDER BY idstat.relname,
         indexrelname;
 


Esta consulta te dará los índices que han sido escaneados menos de 200 veces  y no son únicos. Se omite los índices únicos por el hecho de que ellos son necesarias para forzar el uso de una determinada restricción, por lo que no nos interesan (por ahora).

Esta consulta, por supuesto tiene sus limitantes.
Puedes encontrar esto acá en el blog de Josh Berkus:

http://it.toolbox.com/blogs/database-soup/finding-useless-indexes-28796

En la wiki de PostgreSQL también un artículo dedicado a este tema, pero no recuerdo la dirección, y en el blog de Robert Treat también habla del tema:
http://www.xzilla.net

Saludos



On 03/12/2012 08:21 AM, Jose Alberto Sanchez Nieto wrote:
Hola a todos, queremos limpiar nuestro sistema y borrar los indices que no se estén utilizando, estamos haciéndolo en pgadmin mirando las estadísticas de los índices pero tenemos alguna duda. Por poner un ejemplo en una tabla tenemos dos índices con las siguientes estadísticas:
indice 1:
Busqueda por indices        0
tuplas de Indice leidas        0
tuplas de Indice Extraidas    0
Bloques de Indice Leidos     453
Bloques de Iindices Acertados    24178

indice 2:
Busqueda por indices        77850277
tuplas de Indice leidas        90800350
tuplas de Indice Extraidas    90790803
Bloques de Indice Leidos     133007
Bloques de indices Acertados    233958078

¿Los valores a cero del indice 1 significan que no se está usando?, si es así ¿que significaría en dicho índice el valor de bloques de indice leidos y el de acertados si no se está utilizando?

Gracias y saludos.


--


José Alberto Sánchez Nieto
albertosanc...@hiperusera.es
Responsable Dpto.Sistemas de la Información

Avda Principal s/n
P.Ind Las Avenidas
28991 Torrejón de la Calzada – Madrid
Telf. 918609900
Fax 918160000

Le informamos que su dirección de correo electrónico, asi como el resto de los datos de carácter personal aportados, serán objeto de tratamiento automatizado en nuestro ficheros, con la finalidad de gestionar la agenda de contactos de nuestra empresa y, para poder atender a sus peticiones de consulta via electronica. Vd.podrá en cualquier momento ejercer el derecho de acceso, rectificación, cancelación y oposición en los términos establecidos en la Ley Orgánica 15/1999 mediante notificación escrita con copia de DNI., a la entidad, a través de éste e-mail.

La información incluida en este e-mail es CONFIDENCIAL, siendo para su usu exlusivo del destinatario arriba mencionado. Si Usted lee este mensaje y no es el destinatario indicado, le informamos de que está totalmente prohibida la utilización, divulgación, distribución y/o reproducción de esta comunicaci´ón sin autorización expresa en virtud de la legislacion vigente. Si ha recibido este mensaje por error le rogamos nos o notifique inmediatamente por esta misma vía y proceda a su eliminación.




-- 
Marcos Luis Ortíz Valmaseda
 http://marcosluis2186.posterous.com
 http://postgresql.uci.cu/blog/38  


Reply via email to