Oi Monica,

Seguindo nas suas razoáveis premissas:

> A tabela history possui em média *87 milhões* de registros.
> É uma tabela que sofre muito insert/update/delete.
> Faço analyze e reindexação semanalmente.

Tem como fazer com mais frequência, como por exemplo diariamente? Pelo 
volume de atualizações, pode fazer alguma diferença.

> A tabela tem a seguinte estrutura e índice:
>
> CREATE TABLE history (
>   itemid bigint NOT NULL DEFAULT (0)::bigint,
>   clock integer NOT NULL DEFAULT 0,
>   "value" numeric(16,4) NOT NULL DEFAULT 0.0000
> ) WITH (OIDS=TRUE);

Tire esse maldito OIDS=TRUE, só ocupa espaço. Se alguém disser que usa esse 
treco, convença-o a não usar. Como teu gargalo é I/O e o teu registro é 
pequeno, isso pode fazer dar uma boa diferença.

> CREATE INDEX history_1  ON.history
>   USING btree  (itemid, clock);

Creio que a consulta nem use esse índice, tente criar uma PK ou declare esse 
índice como UNIQUE (se estes campos o forem de fato). Não sei o PostgreSQL, 
mas um banco de dados inteligente se aproveitaria disso.
Usar as tabelas de estatísticas não te dará uma estimativa exata ou vai 
mudar o ponto de lentidão, veja se é aplicável a seu caso.
Esse índice é muito esquisito, você tem certeza que alguma aplicação faz uso 
dele?! COm um índice a menos, a atualização e o vacuum/analyze ficariam 
menos piores.


Mozart 

_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a