Mateus wrote:

> Estou vendo a discussão com relação ao Vacuum e tenho algumas dúvidas.
> 
Primeiro sugiro que leia sobre VACUUM [1] no manual para entender o
porquê e os conceitos por trás dele.

> 1 - Gostaria de saber qual a necessidade de executar o Vacuum diariamente ?
> 
(i) reutilizar espaço ocupado por tuplas "mortas" (atualizadas ou
removidas);
(ii) proteger contra o reinício do ID de transação.
(iii) atualizar estatísticas utilizadas pelo planejador de consultas.

> 2- O auto vacuum não substitui o vacuum manual ?
> 
Não totalmente. O autovac *não* faz um VACUUM FULL. Ele desempenha muito
bem as tarefas de VACUUM, ANALYZE e FREEZE.

> 3 - Como disse o vinicius tem que executar todos esses passos ?
> - VACUUM e ANALYZE
> - VACUUM FULL
> - REINDEX {TABLE|DATABASE }
> 
Não. O que você tem que executar quase que sempre é o ANALYZE [2] para
que suas estatísticas não fiquem obsoletas e gerem planos de execução
errados. O VACUUM [3] é aconselhado para quem faz muitas atualizações
e/ou remoções; ele recicla (reaproveita) espaço que antes era utilizada
por tuplas "mortas" (atualizadas ou removidas). O VACUUM FULL [3] é uma
versão "agressiva" do VACUUM que reorganiza os dados utilizando o espaço
deixado pelas tuplas "mortas". O REINDEX [4] pode ser utilizado para
diminuir o espaço dos índices mas isso depende de outros fatores como o
"fillfactor" utilizado.

A "receita de bolo" dos DBAs é a seguinte:
* ANALYZE: sempre (é importante manter as estatísticas atualizadas);
* VACUUM: sempre que tiver alterações moderadas (por exemplo atualização
em x% da tabela foo);
* VACUUM FULL: dependendo do caso ele não é aconselhado (tabelas muito
grandes -- milhões ou bilhões de registros); é utilizado para recuperar
espaço em disco;
* REINDEX: O VACUUM FULL incha o índice em geral, então esta é uma
operação a ser executada após o VACUUM FULL.

Uma outra opção muito pouco mencionada é o CLUSTER [5] + ANALYZE [2]. O
CLUSTER faz operações similares ao VACUUM FULL + REINDEX. É importante
ressaltar que o CLUSTER é *tão* agressivo quanto o VACUUM FULL, use-o
com moderação.

> 
> 4 - A versão 8.2.4 pode acontecer o reinício do ID de transação ou isso 
> so acontece em versões anteriores a 8.0 ?
> 
Não. Versões anteriores a 8.1 (na 8.0 isso pode ocorrer).

> 5- A cada bilhão de transações tenho que limpar as tabelas do meu BD ou 
> só executar o vacuum resolve ?
> 
Só o VACUUM resolve [6]. Nas versões atuais o que o PostgreSQL faz é não
deixar você executar operações que incrementem o ID de transação para
não ocorrer o reinício. Vale lembrar que é a cada *2 bilhões* de transações.

>    5.1 Se tenho que limpar as tabelas não posso ter um banco com mais 
> de    1 bilhão de registros em cada tabela ?
> 
Pode, não se trata de registros e sim de transações. Veja [7].

> 6- Como melhorar a performance do vacuum ?
> 
Isso só a equipe de desenvolvimento pode fazer, certo? O que você pode
fazer é uma sintonia nos parâmetros do autovac para que ele não seja
executado desnecessariamente (isso não melhora a performance do VACUUM
mas das consultas).

Tenha em mente que o VACUUM é uma das operações mais caras do
PostgreSQL, use-o com moderação. ;)

[1] http://www.postgresql.org/docs/8.2/static/routine-vacuuming.html
[2] http://www.postgresql.org/docs/8.2/static/sql-analyze.html
[3] http://www.postgresql.org/docs/8.2/static/sql-vacuum.html
[4] http://www.postgresql.org/docs/8.2/static/sql-reindex.html
[5] http://www.postgresql.org/docs/8.2/static/sql-cluster.html
[6]
http://www.postgresql.org/docs/8.2/static/routine-vacuuming.html#VACUUM-FOR-WRAPAROUND
[7] http://www.postgresql.org/docs/faqs.FAQ_brazilian.html#item4.4


-- 
  Euler Taveira de Oliveira
  http://www.timbira.com/
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a