On 02/05/2013 11:21 AM, Alvaro Herrera wrote:
Marcos Ortiz escribió:
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;
Pero por lo que veo, en las versiones actuales de PostgreSQL,
pg_size_pretty usa el OID ahora para poder obtener el tamaño de
alguna relación.
Usa pg_relation_size(idstat.relid::regclass) en el primer caso, y
idstat.indexrelid::regclass en el segundo.
Probado y funciona bien
Usar el "relname" es una idea bien mala (podría tomar una tabla o índice
equivocado, si hay dos con el mismo nombre en distintos esquemas).
Recomendaría usar esto en todas las versiones, incluyendo anteriores a
9.1.
Anotado
Bueno, encontré una forma más fácil de encontrar los índices que menos
se usan usando el campo idx_scan:
SELECT schemaname,
relname,
indexrelname,
idx_scan
FROM pg_stat_user_indexes
ORDER BY idx_scan ;
-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda