Estou executando o PostgreSQL 9.1. Percebi que índices realmente ruins estão ocupando muito espaço no meu servidor, por exemplo:
evlampts=# SELECT
pg_size_pretty(pg_relation_size('mcdata_2011_07')) AS relation_size,
pg_size_pretty(pg_total_relation_size('mcdata_2011_07')) AS total_relation_size,
pg_size_pretty(pg_indexes_size('mcdata_2011_07')) AS indexes_size;
relation_size | total_relation_size | indexes_size
---------------+---------------------+--------------
43 GB | 100 GB | 57 GB
(1 row)
Posso ver que, embora boa parte disso seja a chave primária, tenho 11 GB em um índice e 16 em outro:
evlampts=# SELECT
pg_size_pretty(pg_relation_size('mcdata_2011_07_timestamp_idx')) AS timestamp_idx_size,
pg_size_pretty(pg_relation_size('mcdata_2011_07_host_idx')) AS host_idx_size;
timestamp_idx_size | host_idx_size
--------------------+---------------
11 GB | 16 GB
(1 row)
Se eu continuar eliminando esses índices, não vejo nenhuma melhoria dramática no espaço em disco no sistema operacional:
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/md0 1.8T 1.8T 32G 99% /export/home/lando
$ psql evlampts
evlampts=# drop index mcdata_2011_07_host_idx;
DROP INDEX
evlampts=# \q
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/md0 1.8T 1.8T 32G 99% /export/home/lando
Se o espaço fosse liberado para o sistema operacional, esperaria que houvesse outros 16 GB disponíveis. Existe uma VACUUM
etapa que estou perdendo? Ajustei o autovacuum para executar com menos frequência e posso ter ido longe demais, mas não vejo nada na documentação dizendo que VACUUM
é necessário liberar espaço no índice. O que não estou fazendo que deveria estar fazendo?